home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-06-21 | 127.7 KB | 8,885 lines |
-
- maxscrdiv EQU 8
- max3ddiv EQU 5
- playerheight EQU 12*1024
- playercrouched EQU 6*1024
- scrheight EQU 80
-
- ; k/j/m
- ; 4/8
-
-
-
- ; s/x
- ; b/n
-
- xpos EQU 0 ;l
- zpos EQU 4 ;l
- zsinval EQU 8 ;w
- zcosval EQU 10 ;w
- ztox EQU 12 ;l
- xsinval EQU 16 ;w
- xcosval EQU 18 ;w
- xspd EQU 20 ;w
-
- zspd EQU 22 ;wd
- mapx EQU 24 ;b
- mapz EQU 25 ;b
- whichtile EQU 26 ;b
- xofflight EQU 28 ;w
- zofflight EQU 30 ;w
- offlight EQU 32 ;w
- zlinestore EQU 34
- zlinedir EQU 38
- zposdir EQU 40
- zposstore EQU 42
- xdiststore EQU 44
- xdistdir EQU 46
- zwallfound EQU 48
-
- xlinestore EQU 50
- xlinedir EQU 54
- xposdir EQU 56
- xposstore EQU 58
- zdiststore EQU 60
- zdistdir EQU 62
- xwallfound EQU 64
-
-
- midoffset EQU 104*4*40
-
- SECTION Scrn,CODE
- OpenLib equ -552
- CloseLib equ -414
-
- INTREQ equ $09C
- INTENA equ $09A
- INTENAR equ $01C
- DMACON equ $096
-
- SERPER equ $032
- SERDATR equ $018
- SERDAT equ $030
- vhposr equ $006
- vhposrl equ $007
-
- bltcon0 equ $40
- bltcon1 equ $42
- bltcpt equ $48
- bltbpt equ $4c
- bltapt equ $50
- spr0ctl equ $142
- spr1ctl equ $14a
- spr2ctl equ $152
- spr3ctl equ $15a
- spr4ctl equ $162
- spr5ctl equ $16a
- spr6ctl equ $172
- spr7ctl equ $17a
- spr0pos equ $140
- spr1pos equ $148
- spr2pos equ $150
- spr3pos equ $158
- spr4pos equ $160
- spr5pos equ $168
- spr6pos equ $170
- spr7pos equ $178
- bltdpt equ $54
- bltafwm equ $44
- bltalwm equ $46
- bltsize equ $58
- bltcmod equ $60
- bltbmod equ $62
- bltamod equ $64
- bltdmod equ $66
- diwstart equ $8e ; Screen hardware registers.
- diwstop equ $90
- ddfstart equ $92
- ddfstop equ $94
- bplcon0 equ $100
- bplcon1 equ $102
- col0 equ $180
- col1 equ $182
- col2 equ $184
- col3 equ $186
- col4 equ $188
- col5 equ $18a
- col6 equ $18c
- col7 equ $18e
- col8 equ $190
- col9 equ $192
- col10 equ $194
- col11 equ $196
- col12 equ $198
- col13 equ $19a
- dmacon equ $96
- dmaconr equ $002
- intenar equ $01c
- intena equ $09a
- intreq equ $09c
- intreqr equ $01e
- intreqrl equ $01f
- bpl1pth equ $e0
- bpl1ptl equ $e2
- bpl2pth equ $e4
- bpl2ptl equ $e6
- bpl3pth equ $e8
- bpl3ptl equ $ea
- bpl4pth equ $ec
- bpl4ptl equ $ee
- bpl5pth equ $f0
- bpl5ptl equ $f2
- bpl6pth equ $f4
- bpl6ptl equ $f6
- bpl7pth equ $f8
- bpl7ptl equ $fa
- bpl8pth equ $fc
- bpl8ptl equ $fe
- spr0pth equ $120
- spr0ptl equ $122
- spr1pth equ $124
- spr1ptl equ $126
- spr2pth equ $128
- spr2ptl equ $12a
- spr3pth equ $12c
- spr3ptl equ $12e
- spr4pth equ $130
- spr4ptl equ $132
- spr5pth equ $134
- spr5ptl equ $136
- spr6pth equ $138
- spr6ptl equ $13a
- spr7pth equ $13c
- spr7ptl equ $13e
-
- ; move.l #length,d0
- ; moveq.l #2,d1 ; chipmem
- ; move.l 4.w,a6
- ; jsr allocmem(a6) = -198
-
- ; tst.l d0
- ; beq.s ohbugger
- ; move.l d0,memaddr
-
-
- ; move.l 4.w,a6
- ; move.l memaddr,a1
- ; move.l #size,d0
- ; jsr freemem(a6) =-210
-
-
- ** This waits for the blitter to finish before allowing program
- ** execution to continue.
-
- SAVEREGS MACRO
- movem.l d0-d7/a0-a6,-(a7)
- ENDM
-
- GETREGS MACRO
- movem.l (a7)+,d0-d7/a0-a6
- ENDM
-
-
- WB MACRO
- \@bf:
- btst #6,dmaconr(a6)
- bne.s \@bf
- ENDM
-
- *Another version for when a6 <> dff000
-
- WBSLOW MACRO
- \@bf:
- btst #6,$dff000+dmaconr
- bne.s \@bf
- ENDM
-
- WT MACRO
- \@bf:
- btst #6,(a3)
- bne.s \@bd
- rts
- \@bd:
- btst #4,(a0)
- beq.s \@bf
- ENDM
-
- WTNOT MACRO
- \@bf:
- btst #6,(a3)
- bne.s \@bd
- rts
- \@bd:
- btst #4,(a0)
- bne.s \@bf
- ENDM
-
- **
-
- include "macros.i"
- include "ab3:source/defs.i"
-
- move.w (a0)+,mors
-
- move.l #$dff000,a6 ; NB V. IMPORTANT: A6=CUSTOM BASE
- move.w #13,SERPER(a6) ;19200 baud, 8 bits, no parity
-
- jsr START
-
- rts
-
- * Load level into buffers.
- clr.b doanything
-
- PLAYTHEGAME:
-
- jsr INITCOPPERSCRN
-
- ; Get level memory.
-
- move.l #1,d1
- move.l #100000,d0
- move.l 4.w,a6
- jsr -198(a6)
- move.l d0,LEVELDATA
-
- move.l #1,d1
- move.l #50000,d0
- move.l 4.w,a6
- jsr -198(a6)
- move.l d0,LEVELGRAPHICS
-
- move.l #1,d1
- move.l #50000,d0
- move.l 4.w,a6
- jsr -198(a6)
- move.l d0,LEVELCLIPS
-
- ; move.l #LEVELDATAD,LEVELDATA
- ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
- ; move.l #LEVELCLIPSD,LEVELCLIPS
-
-
- ; bra noload
-
- move.l doslib,a6
- move.l #LDname,d1
- move.l #1005,d2
- jsr -30(a6)
- move.l d0,LDhandle
-
- move.l doslib,a6
- move.l d0,d1
- move.l LEVELDATA,d2
- move.l #100000,d3
- jsr -42(a6)
-
- move.l doslib,a6
- move.l LDhandle,d1
- jsr -36(a6)
-
- ********
-
- move.l doslib,a6
- move.l #LGname,d1
- move.l #1005,d2
- jsr -30(a6)
- move.l d0,LGhandle
-
- move.l doslib,a6
- move.l d0,d1
- move.l LEVELGRAPHICS,d2
- move.l #50000,d3
- jsr -42(a6)
-
- move.l doslib,a6
- move.l LGhandle,d1
- jsr -36(a6)
-
- ********
-
- move.l doslib,a6
- move.l #LCname,d1
- move.l #1005,d2
- jsr -30(a6)
- move.l d0,LChandle
-
- move.l doslib,a6
- move.l d0,d1
- move.l LEVELCLIPS,d2
- move.l #50000,d3
- jsr -42(a6)
-
- move.l doslib,a6
- move.l LChandle,d1
- jsr -36(a6)
-
- *******
-
- noload:
-
- ********
-
- jsr LOADWALLS
- jsr LOAD_SFX
- jsr LOADFLOOR
- jsr LOADOBS
-
- ; move.l doslib,a6
- ; move.l #Prefsname,d1
- ; move.l #1005,d2
- ; jsr -30(a6)
- ; move.l d0,Prefshandle
-
- ; move.l doslib,a6
- ; move.l d0,d1
- ; move.l #Prefsfile,d2
- ; move.l #50,d3
- ; jsr -42(a6)
-
- ; move.l doslib,a6
- ; move.l Prefshandle,d1
- ; jsr -36(a6)
-
- *******
-
- cmp.b #'s',Prefsfile+2
- seq STEREO
-
- move.l doslib,d0
- move.l d0,a1
- move.l 4.w,a6
- jsr CloseLib(a6)
-
- move.l #$dff000,a6
- move.w #$87c0,dmacon(a6)
- move.w #$8020,dmacon(a6)
- move.w intenar(a6),saveinters
- move.w #$7fff,intena(a6)
- move.w #$00ff,$dff09e
-
- *** Put myself in supervisor mode
-
- move.l #blag,$80
- trap #0
- ; move.l $6c,d0
- ; move.l #blag,$6c
- ; move.w #$8010,intreq(a6)
-
- rts
-
- saveit: ds.l 10
- doslibname: dc.b 'dos.library',0
- even
- doslib: dc.l 0
-
- mors: dc.w 0
-
- LDname: dc.b 'ab3:includes/twolev.bin',0
- even
- LDhandle: dc.l 0
- LGname: dc.b 'ab3:includes/twolev.graph.bin',0
- even
- LGhandle: dc.l 0
- LCname: dc.b 'ab3:includes/twolev.clips',0
- even
- LChandle: dc.l 0
-
- Prefsname: dc.b 'ram:prefs',0
- even
- Prefshandle: dc.l 0
-
- Prefsfile:
- dc.b 'k4nx'
- ds.b 50
-
- even
-
- blag:
- ; move.w #$10,intreq(a6)
- ; move.l d0,$6c
- ; move.w #$7fff,intena(a6)
-
- move.w #$20,$dff1dc
-
- move.l $6c,saveit
- move.l #Chan0inter,$6c
-
- ****************************
- * Initialize level
- ****************************
- * Poke all clip offsets into
- * correct bit of level data.
- ****************************
- move.l LEVELGRAPHICS,a0
- move.l 12(a0),a1
- add.l a0,a1
- move.l a1,ZoneGraphAdds
- move.l (a0),a1
- add.l a0,a1
- move.l a1,DoorData
- move.l 4(a0),a1
- add.l a0,a1
- move.l a1,LiftData
- move.l 8(a0),a1
- add.l a0,a1
- move.l a1,SwitchData
- adda.w #16,a0
- move.l a0,ZoneAdds
-
- move.l LEVELDATA,a1
- move.l 16+6(a1),a2
- add.l a1,a2
- move.l a2,Points
- move.w 8+6(a1),d0
- lea 4(a2,d0.w*4),a2
- move.l a2,PointBrights
-
- move.l 20+6(a1),a2
- add.l a1,a2
- move.l a2,FloorLines
- move.l 24+6(a1),a2
- add.l a1,a2
- move.l a2,ObjectData
- move.l 28+6(a1),a2
- add.l a1,a2
- move.l a2,PlayerShotData
- move.l 32+6(a1),a2
- add.l a1,a2
- move.l a2,NastyShotData
- move.l 36+6(a1),a2
- add.l a1,a2
- move.l a2,ObjectPoints
- move.l 40+6(a1),a2
- add.l a1,a2
- move.l a2,PLR1_Obj
- move.l 44+6(a1),a2
- add.l a1,a2
- move.l a2,PLR2_Obj
- move.w 14+6(a1),NumObjectPoints
-
- ; bra noclips
-
- move.l LEVELCLIPS,a2
- moveq #0,d0
- move.w 10+6(a1),d7 ;numzones
- assignclips:
- move.l (a0)+,a3
- add.l a1,a3 ; pointer to a zone
- adda.w #ToListOfGraph,a3 ; pointer to zonelist
- dowholezone:
- tst.w (a3)
- blt.s nomorethiszone
- tst.w 2(a3)
- blt.s thisonenull
-
- move.l d0,d1
- asr.l #1,d1
- move.w d1,2(a3)
-
- findnextclip:
- cmp.w #-2,(a2,d0.l)
- beq.s foundnextclip
- addq.l #2,d0
- bra.s findnextclip
- foundnextclip
- addq.l #2,d0
-
- thisonenull:
- addq #8,a3
- bra.s dowholezone
- nomorethiszone:
- dbra d7,assignclips
-
- lea (a2,d0.l),a2
- move.l a2,CONNECT_TABLE
-
- noclips:
-
- * Put in addresses of glowything
-
-
- ************************************
-
- ; cmp.b #'k',Prefsfile
- ; bne.s nkb
- st PLR1KEYS
- clr.b PLR1PATH
- clr.b PLR1MOUSE
- clr.b PLR1JOY
- st PLR2KEYS
- clr.b PLR2PATH
- clr.b PLR2MOUSE
- clr.b PLR2JOY
-
- ;nkb:
- ; cmp.b #'m',Prefsfile
- ; bne.s nmc
- ; clr.b PLR1KEYS
- ; clr.b PLR1PATH
- ; st PLR1MOUSE
- ; clr.b PLR1JOY
- ;nmc:
- ; cmp.b #'j',Prefsfile
- ; bne.s njc
- ; clr.b PLR1KEYS
- ; clr.b PLR1PATH
- ; clr.b PLR1MOUSE
- ; st PLR1JOY
- ;njc:
-
- clr.b PLR1_StoodInTop
- move.l #playerheight,PLR1s_height
-
- move.l #empty,pos1LEFT
- move.l #empty,pos2LEFT
- move.l #empty,pos1RIGHT
- move.l #empty,pos2RIGHT
- move.l #emptyend,Samp0endLEFT
- move.l #emptyend,Samp1endLEFT
- move.l #emptyend,Samp0endRIGHT
- move.l #emptyend,Samp1endRIGHT
-
- move.l #nullspr,d0
- move.w d0,s4l
- move.w d0,s5l
- move.w d0,s6l
- move.w d0,s7l
- swap d0
- move.w d0,s4h
- move.w d0,s5h
- move.w d0,s6h
- move.w d0,s7h
-
- move.l #nullline,d0
- move.w d0,n1l
- swap d0
- move.w d0,n1h
-
- move.l #Panel,d0
- move.w d0,p1l
- swap d0
- move.w d0,p1h
- move.l #Panel+40,d0
- move.w d0,p2l
- swap d0
- move.w d0,p2h
- move.l #Panel+40*2,d0
- move.w d0,p3l
- swap d0
- move.w d0,p3h
- move.l #Panel+40*3,d0
- move.w d0,p4l
- swap d0
- move.w d0,p4h
- move.l #Panel+40*4,d0
- move.w d0,p5l
- swap d0
- move.w d0,p5h
- move.l #Panel+40*5,d0
- move.w d0,p6l
- swap d0
- move.w d0,p6h
- move.l #Panel+40*6,d0
- move.w d0,p7l
- swap d0
- move.w d0,p7h
- move.l #Panel+40*7,d0
- move.w d0,p8l
- swap d0
- move.w d0,p8h
-
- *******************************
- * TIMER SCREEN SETUP
- ; move.l #TimerScr,d0
- ; move.w d0,p1l
- ; swap d0
- ; move.w d0,p1h
- ; move.w #$1201,Panelcon
-
- move.l #borders,d0
- move.w d0,s0l
- swap d0
- move.w d0,s0h
- move.l #borders+2592,d0
- move.w d0,s1l
- swap d0
- move.w d0,s1h
- move.l #borders+2592*2,d0
- move.w d0,s2l
- swap d0
- move.w d0,s2h
- move.l #borders+2592*3,d0
- move.w d0,s3l
- swap d0
- move.w d0,s3h
-
- move.w #52*256+64,borders
- move.w #212*256+0,borders+8
- move.w #52*256+64,borders+2592
- move.w #212*256+128,borders+8+2592
- move.w #52*256+192,borders+2592*2
- move.w #212*256+0,borders+8+2592*2
- move.w #52*256+192,borders+2592*3
- move.w #212*256+128,borders+8+2592*3
-
- move.l #FacePlace,d0
- move.w d0,f1l
- swap d0
- move.w d0,f1h
- move.l #FacePlace+32*24,d0
- move.w d0,f2l
- swap d0
- move.w d0,f2h
- move.l #FacePlace+32*24*2,d0
- move.w d0,f3l
- swap d0
- move.w d0,f3h
- move.l #FacePlace+32*24*3,d0
- move.w d0,f4l
- swap d0
- move.w d0,f4h
- move.l #FacePlace+32*24*4,d0
- move.w d0,f5l
- swap d0
- move.w d0,f5h
-
-
- move.l #bigfield,d0
- move.w d0,ocl
- swap d0
- move.w d0,och
-
- bset.b #1,$bfe001
-
- ; jmp stuff
- ;endstuff:
-
- move.l #bigfield,$dff080 ; Point the copper at our copperlist.
- move.w #$00ff,$dff09e
-
- ; move.l #Blurbfield,$dff080
-
- move.w #0,d0
-
- move.l #scrn,d0
- move.w d0,pl1l
- swap d0
- move.w d0,pl1h
-
- move.l #scrn+40,d0
- move.w d0,pl2l
- swap d0
- move.w d0,pl2h
-
- move.l #scrn+80,d0
- move.w d0,pl3l
- swap d0
- move.w d0,pl3h
-
- move.l #scrn+120,d0
- move.w d0,pl4l
- swap d0
- move.w d0,pl4h
-
- move.l #scrn+160,d0
- move.w d0,pl5l
- swap d0
- move.w d0,pl5h
-
- move.l #scrn+200,d0
- move.w d0,pl6l
- swap d0
- move.w d0,pl6h
-
- move.l #scrn+240,d0
- move.w d0,pl7l
- swap d0
- move.w d0,pl7h
-
-
- ****************************
- jsr INITPLAYER
- ; bsr initobjpos
- ****************************
-
-
- move.l #$dff000,a6
-
- move.l #null,$dff0a0
- move.w #100,$dff0a4
- move.w #443,$dff0a6
- move.w #63,$dff0a8
-
- move.l #null2,$dff0b0
- move.w #100,$dff0b4
- move.w #443,$dff0b6
- move.w #63,$dff0b8
-
- move.l #null4,$dff0c0
- move.w #100,$dff0c4
- move.w #443,$dff0c6
- move.w #63,$dff0c8
-
- move.l #null3,$dff0d0
- move.w #100,$dff0d4
- move.w #443,$dff0d6
- move.w #63,$dff0d8
-
- move.l #tab,a1
- move.w #64,d7
- move.w #0,d6
- outerlop
- move.l #pretab,a0
- move.w #255,d5
- scaledownlop:
- move.b (a0)+,d0
- ext.w d0
- ext.l d0
- muls d6,d0
- asr.l #6,d0
- move.b d0,(a1)+
- dbra d5,scaledownlop
- addq #1,d6
- dbra d7,outerlop
-
- move.l #$dff000,a6
-
- move.w #$c018,intena(a6)
-
- move.w #$f,dmacon(a6)
- move.w #$820f,dmacon(a6)
-
- ; bsr protinit
-
- bsr FullEnergy
- move.w #63,OldAmmo
- move.w #0,Ammo
- bsr AmmoBar
- move.w #0,OldAmmo
-
- move.w #127,PLR1_energy
- move.w #127,PLR2_energy
- move.b #1,PLR1_GunDamage
- move.b #1,PLR2_GunDamage
- move.w #3,PLR1_GunNoise
- move.w #3,PLR2_GunNoise
-
- move.w #80,PLR1_GunData ; 10 shots pistol
- st PLR1_GunData+7
- clr.b PLR1_GunData+32+7
- clr.w PLR1_GunData+32
- move.b #0,PLR1_GunSelected
-
- move.w #80,PLR2_GunData ; 10 shots pistol
- st PLR2_GunData+7
- clr.b PLR2_GunData+32+7
- clr.w PLR2_GunData+32
- move.b #0,PLR2_GunSelected
-
- ; move.w #$20,$1dc(a6)
-
- move.w #$0,$dff034
- move.w #0,Conditions
- move.l #KeyMap,a5
- clr.b $45(a5)
-
- move.l #ingame,mt_data
- clr.b UseAllChannels
-
- ; cmp.b #'b',Prefsfile+3
- ; bne.s .noback
- ; jsr mt_init
- ;.noback:
- ;
- ; clr.b CHANNELDATA
- ; clr.b CHANNELDATA+8
- ; clr.b CHANNELDATA+16
- ; clr.b CHANNELDATA+24
- ;
- ; cmp.b #'b',Prefsfile+3
- ; bne.s noreserve
- ;
- ; st CHANNELDATA
- ; st CHANNELDATA+8
- ; st CHANNELDATA+16
- ; st CHANNELDATA+24
- ;noreserve:
-
- ; st CHANNELDATA
- ; st CHANNELDATA+8
-
- move.l SampleList+6*8,pos0LEFT
- move.l SampleList+6*8+4,Samp0endLEFT
- move.l #playerheight,PLR1s_targheight
- move.l #playerheight,PLR1s_height
- move.l #playerheight,PLR2s_targheight
- move.l #playerheight,PLR2s_height
-
- ; cmp.b #'n',mors
- ; beq.s nohandshake
- ;
- ; move.b #%11011000,$bfd200
- ; move.b #%00010000,$bfd000
- ;waitloop:
- ; btst.b #4,$bfd000
- ; bne.s waitloop
- ; move.b #%11000000,$bfd200
-
- ;wtmouse:
- ; btst #6,$bfe001
- ; bne.s wtmouse
-
- ;nohandshake:
- st doanything
-
-
- ; jmp end
-
- move.l COPSCRN1,drawpt
- move.l COPSCRN2,olddrawpt
-
- jsr KInt_Init
- jsr MAKEBACKROUT
-
- lop:
-
- st READCONTROLS
- move.l #$dff000,a6
-
- move.w hitcol,d0
- beq.s nofadedownhc
- sub.w #$100,d0
- move.w d0,hitcol
- move.w d0,hitcol2
- nofadedownhc:
-
- move.l drawpt,d0
- move.l olddrawpt,drawpt
- move.l d0,olddrawpt
- move.l d0,$dff084
- move.l drawpt,a3
- adda.w #10,a3
- move.l a3,frompt
- add.l #104*4*40,a3
- move.l a3,midpt
-
- cmp.b #'s',mors
- beq.s nowaitslave
-
- waitfortop:
- btst.b #0,intreqrl(a6)
- beq waitfortop
- move.w #$1,intreq(a6)
- move.l #PLR1_GunData,GunData
- move.b PLR1_GunSelected,GunSelected
- bra waitmaster
-
- nowaitslave:
- move.l #PLR2_GunData,GunData
- move.b PLR2_GunSelected,GunSelected
- waitmaster:
-
-
- move.l waterpt,a0
- move.l (a0)+,watertouse
- cmp.l #endwaterlist,a0
- blt.s okwat
- move.l #waterlist,a0
- okwat:
- move.l a0,waterpt
-
- add.w #640,wtan
- and.w #8191,wtan
- add.w #1,wateroff
- and.w #63,wateroff
-
- move.l GunData,a6
- moveq #0,d0
- move.b GunSelected,d0
- lsl.w #2,d0
- lea (a6,d0.w*8),a6
- move.w (a6),d0
- asr.w #3,d0
- move.w d0,Ammo
-
- move.l #$dff000,a6
-
- cmp.b #'s',mors
- beq ASlaveShouldWaitOnHisMaster
-
- cmp.b #'n',mors
- bne NotOnePlayer
-
- move.w PLR1_energy,Energy
- move.w FramesToDraw,TempFrames
- move.w #0,FramesToDraw
-
- move.l PLR1s_xoff,p1_xoff
- move.l PLR1s_zoff,p1_zoff
- move.l PLR1s_yoff,p1_yoff
- move.l PLR1s_height,p1_height
- move.w PLR1s_angpos,p1_angpos
- move.w PLR1_bobble,p1_bobble
- move.b PLR1_clicked,p1_clicked
- move.b PLR1_fire,p1_fire
- clr.b PLR1_clicked
- move.b PLR1_SPCTAP,p1_spctap
- clr.b PLR1_SPCTAP
- move.b PLR1_Ducked,p1_ducked
- move.b PLR1_GunSelected,p1_gunselected
-
- bsr PLR1_Control
-
- move.l PLR1_Roompt,a0
- move.l ToZoneRoof(a0),SplitHeight
- move.w p1_xoff,THISPLRxoff
- move.w p1_zoff,THISPLRzoff
-
-
- move.l #$60000,p2_yoff
- move.l PLR2_Obj,a0
- move.w #-1,GraphicRoom(a0)
- move.w #-1,12(a0)
- move.b #0,17(a0)
- move.l #BollocksRoom,PLR2_Roompt
-
- bra donetalking
-
- NotOnePlayer:
-
- move.w PLR1_energy,Energy
-
- jsr SENDFIRST
-
- move.w FramesToDraw,TempFrames
- move.w #0,FramesToDraw
-
- move.l PLR1s_xoff,p1_xoff
- move.l PLR1s_zoff,p1_zoff
- move.l PLR1s_yoff,p1_yoff
- move.l PLR1s_height,p1_height
- move.w PLR1s_angpos,p1_angpos
- move.w PLR1_bobble,p1_bobble
- move.b PLR1_clicked,p1_clicked
- clr.b PLR1_clicked
- move.b PLR1_fire,p1_fire
- move.b PLR1_SPCTAP,p1_spctap
- clr.b PLR1_SPCTAP
- move.b PLR1_Ducked,p1_ducked
- move.b PLR1_GunSelected,p1_gunselected
-
- move.l p1_xoff,d0
- jsr SENDFIRST
- move.l d0,p2_xoff
-
- move.l p1_zoff,d0
- jsr SENDFIRST
- move.l d0,p2_zoff
-
- move.l p1_yoff,d0
- jsr SENDFIRST
- move.l d0,p2_yoff
-
- move.l p1_height,d0
- jsr SENDFIRST
- move.l d0,p2_height
-
- move.w p1_angpos,d0
- swap d0
- move.w p1_bobble,d0
- jsr SENDFIRST
- move.w d0,p2_bobble
- swap d0
- move.w d0,p2_angpos
-
-
- move.w TempFrames,d0
- swap d0
- move.b p1_spctap,d0
- lsl.w #8,d0
- move.b p1_clicked,d0
- jsr SENDFIRST
- move.b d0,p2_clicked
- lsr.w #8,d0
- move.b d0,p2_spctap
-
-
- move.w Rand1,d0
- swap d0
- move.b p1_ducked,d0
- lsl.w #8,d0
- move.b p1_gunselected,d0
- jsr SENDFIRST
- move.b d0,p2_gunselected
- lsr.w #8,d0
- move.b d0,p2_ducked
-
- move.b p1_fire,d0
- jsr SENDFIRST
- move.b d0,p2_fire
-
- bsr PLR2_Control
- bsr PLR1_Control
- move.l PLR1_Roompt,a0
- move.l ToZoneRoof(a0),SplitHeight
- move.w p1_xoff,THISPLRxoff
- move.w p1_zoff,THISPLRzoff
-
- bra donetalking
-
- ASlaveShouldWaitOnHisMaster:
-
- move.w PLR2_energy,Energy
-
- jsr RECFIRST
-
- move.l PLR2s_xoff,p2_xoff
- move.l PLR2s_zoff,p2_zoff
- move.l PLR2s_yoff,p2_yoff
- move.l PLR2s_height,p2_height
- move.w PLR2s_angpos,p2_angpos
- move.w PLR2_bobble,p2_bobble
- move.b PLR2_clicked,p2_clicked
- clr.b PLR2_clicked
- move.b PLR2_fire,p2_fire
- move.b PLR2_SPCTAP,p2_spctap
- clr.b PLR2_SPCTAP
- move.b PLR2_Ducked,p2_ducked
- move.b PLR2_GunSelected,p2_gunselected
-
- move.l p2_xoff,d0
- jsr RECFIRST
- move.l d0,p1_xoff
-
- move.l p2_zoff,d0
- jsr RECFIRST
- move.l d0,p1_zoff
-
- move.l p2_yoff,d0
- jsr RECFIRST
- move.l d0,p1_yoff
-
- move.l p2_height,d0
- jsr RECFIRST
- move.l d0,p1_height
-
- move.w p2_angpos,d0
- swap d0
- move.w p2_bobble,d0
- jsr RECFIRST
- move.w d0,p1_bobble
- swap d0
- move.w d0,p1_angpos
-
-
- move.b p2_spctap,d0
- lsl.w #8,d0
- move.b p2_clicked,d0
- jsr RECFIRST
- move.b d0,p1_clicked
- lsr.w #8,d0
- move.b d0,p1_spctap
- swap d0
- move.w d0,TempFrames
-
-
- move.b p2_ducked,d0
- lsl.w #8,d0
- move.b p2_gunselected,d0
- jsr RECFIRST
- move.b d0,p1_gunselected
- lsr.w #8,d0
- move.b d0,p1_ducked
- swap d0
- move.w d0,Rand1
-
- move.b p2_fire,d0
- jsr RECFIRST
- move.b d0,p1_fire
-
-
- bsr PLR1_Control
- bsr PLR2_Control
- move.w p2_xoff,THISPLRxoff
- move.w p2_zoff,THISPLRzoff
- move.l PLR2_Roompt,a0
- move.l ToZoneRoof(a0),SplitHeight
-
- donetalking:
-
- move.l #ZoneBrightTable,a1
- move.l ZoneAdds,a2
- move.l PLR2_ListOfGraphRooms,a0
- move.l PLR2_PointsToRotatePtr,a5
- cmp.b #'s',mors
- beq.s doallz
- move.l PLR1_ListOfGraphRooms,a0
- move.l PLR1_PointsToRotatePtr,a5
-
- doallz
- move.w (a0),d0
- blt.s doneallz
- add.w #8,a0
-
- move.l (a2,d0.w*4),a3
- add.l LEVELDATA,a3
- move.w ToZoneBrightness(a3),d2
-
- blt.s justbright
- move.w d2,d3
- lsr.w #8,d3
- tst.b d3
- beq.s justbright
-
- move.l #BrightAnimTable,a4
- move.w -2(a4,d3.w*2),d2
-
- justbright:
- move.w d2,(a1,d0.w*4)
-
- move.w ToUpperBrightness(a3),d2
-
- blt.s justbright2
- move.w d2,d3
- lsr.w #8,d3
- tst.b d3
- beq.s justbright2
-
- move.l #BrightAnimTable,a4
- move.w -2(a4,d3.w*2),d2
-
- justbright2:
- move.w d2,2(a1,d0.w*4)
-
- bra doallz
-
- doneallz:
-
- move.l PointBrights,a2
- move.l #CurrentPointBrights,a3
- justtheone:
- move.w (a5)+,d0
- blt.s whythehell
- move.w (a2,d0.w*4),d2
-
- tst.b d2
- blt.s .justbright
- move.w d2,d3
- lsr.w #8,d3
- tst.b d3
- beq.s .justbright
-
- move.w d3,d4
- and.w #$f,d3
- lsr.w #4,d4
- add.w #1,d4
-
- move.l #BrightAnimTable,a0
- move.w -2(a0,d3.w*2),d3
- ext.w d2
- sub.w d2,d3
- muls d4,d3
- asr.w #4,d3
- add.w d3,d2
-
- .justbright:
- ext.w d2
-
- move.w d2,(a3,d0.w*4)
-
-
- move.w 2(a2,d0.w*4),d2
-
- tst.b d2
- blt.s .justbright2
- move.w d2,d3
- lsr.w #8,d3
- tst.b d3
- beq.s .justbright2
-
- move.w d3,d4
- and.w #$f,d3
- lsr.w #4,d4
- add.w #1,d4
-
- move.l #BrightAnimTable,a0
- move.w -2(a0,d3.w*2),d3
- ext.w d2
- sub.w d2,d3
- muls d4,d3
- asr.w #4,d3
- add.w d3,d2
-
- .justbright2:
- ext.w d2
-
- move.w d2,2(a3,d0.w*4)
-
- bra.s justtheone
-
- whythehell:
-
- cmp.b #'n',mors
- beq nosee
-
- move.l PLR1_Roompt,FromRoom
- move.l PLR2_Roompt,ToRoom
- move.w p1_xoff,Viewerx
- move.w p1_zoff,Viewerz
- move.l p1_yoff,d0
- asr.l #7,d0
- move.w d0,Viewery
- move.w p2_xoff,Targetx
- move.w p2_zoff,Targetz
- move.l p2_yoff,d0
- asr.l #7,d0
- move.w d0,Targety
- move.b PLR1_StoodInTop,ViewerTop
- move.b PLR2_StoodInTop,TargetTop
- jsr CanItBeSeen
-
- move.l PLR1_Obj,a0
- move.b CanSee,d0
- and.b #2,d0
- move.b d0,17(a0)
- move.l PLR2_Obj,a0
- move.b CanSee,d0
- and.b #1,d0
- move.b d0,17(a0)
-
- nosee:
-
- move.l PLR1_Obj,a0
- move.b #5,16(a0)
- move.l PLR2_Obj,a0
- move.b #11,16(a0)
-
- move.w TempFrames,d0
- add.w d0,p1_holddown
- cmp.w #30,p1_holddown
- blt.s oklength
- move.w #30,p1_holddown
- oklength:
-
- tst.b p1_fire
- bne.s okstillheld
- sub.w d0,p1_holddown
- bge.s okstillheld
- move.w #0,p1_holddown
-
- okstillheld:
-
- move.w TempFrames,d0
- add.w d0,p2_holddown
-
- cmp.w #30,p2_holddown
- blt.s oklength2
- move.w #30,p2_holddown
- oklength2:
-
-
- tst.b p2_fire
- bne.s okstillheld2
- sub.w d0,p2_holddown
- bge.s okstillheld2
- move.w #0,p2_holddown
- okstillheld2:
-
- move.l #PLR1_GunData,a1
- move.w p1_holddown,d0
- move.w d0,10+32*3(a1)
- move.l #PLR2_GunData,a1
- move.w p2_holddown,d0
- move.w d0,10+32*3(a1)
-
-
- ******************************************
- ******************************************
-
-
- cmp.b #'s',mors
- beq.s ImPlayer2OhYesIAm
- bsr USEPLR1
- bra IWasPlayer1
-
- ImPlayer2OhYesIAm:
- bsr USEPLR2
- IWasPlayer1:
-
-
- cmp.b #'s',mors
- beq drawplayer2
-
- move.w #0,scaleval
- move.l PLR1_xoff,xoff
- move.l PLR1_yoff,yoff
- move.l PLR1_zoff,zoff
- move.w PLR1_angpos,angpos
- move.w PLR1_cosval,cosval
- move.w PLR1_sinval,sinval
- move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
- move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
- move.l PLR1_Roompt,Roompt
-
- bsr OrderZones
- jsr objmoveanim
- bsr EnergyBar
- bsr AmmoBar
-
-
- move.w #0,leftclip
- move.w #96,rightclip
- move.w #0,deftopclip
- move.w #79,defbotclip
- move.w #0,topclip
- move.w #79,botclip
- ; sub.l #10*104*4,frompt
- ; sub.l #10*104*4,midpt
-
- * Subroom loop
-
- bsr DrawDisplay
-
-
-
- bra nodrawp2
-
- drawplayer2
-
- move.w #0,scaleval
- move.l PLR2_xoff,xoff
- move.l PLR2_yoff,yoff
- move.l PLR2_zoff,zoff
- move.w PLR2_angpos,angpos
- move.w PLR2_cosval,cosval
- move.w PLR2_sinval,sinval
- move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
- move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
- move.l PLR2_Roompt,Roompt
-
- bsr OrderZones
- jsr objmoveanim
- bsr EnergyBar
- bsr AmmoBar
-
- move.w #0,leftclip
- move.w #96,rightclip
- move.w #0,deftopclip
- move.w #79,defbotclip
- move.w #0,topclip
- move.w #79,botclip
-
- bsr DrawDisplay
-
- nodrawp2:
-
- move.l PLR2_Roompt,a0
- move.l #WorkSpace,a1
- clr.l (a1)
- clr.l 4(a1)
- clr.l 8(a1)
- clr.l 12(a1)
- clr.l 16(a1)
- clr.l 20(a1)
- clr.l 24(a1)
- clr.l 28(a1)
-
- cmp.b #'n',mors
- beq.s plr1only
-
- lea ToListOfGraph(a0),a0
- .doallrooms:
- move.w (a0),d0
- blt.s .allroomsdone
- addq #8,a0
- move.w d0,d1
- asr.w #3,d0
- bset d1,(a1,d0.w)
- bra .doallrooms
- .allroomsdone:
-
- plr1only:
-
- move.l PLR1_Roompt,a0
- lea ToListOfGraph(a0),a0
- .doallrooms2:
- move.w (a0),d0
- blt.s .allroomsdone2
- addq #8,a0
- move.w d0,d1
- asr.w #3,d0
- bset d1,(a1,d0.w)
- bra .doallrooms2
- .allroomsdone2:
-
- move.l ObjectData,a0
- sub.w #64,a0
- .doallobs:
- add.w #64,a0
- move.w (a0),d0
- blt.s .allobsdone
- move.w 12(a0),d0
- blt.s .doallobs
- move.w d0,d1
- asr.w #3,d0
- btst d1,(a1,d0.w)
- beq.s .doallobs
- or.b #127,worry(a0)
- bra.s .doallobs
- .allobsdone:
-
-
-
- ; move.l #brightentab,a0
- ; move.l frompt,a3
- ; adda.w #(4*33)+(104*4*20),a3
- ; move.w #20,d7
- ; move.w #20,d6
- ;horl:
- ; move.w d6,d5
- ; move.l a3,a1
- ;vertl
- ; move.w (a1),d0
- ; move.w (a0,d0.w*2),(a1)
- ; addq #4,a1
- ; dbra d5,vertl
- ; adda.w #104*4,a3
- ; dbra d7,horl
-
- move.l #$dff000,a6
-
- ; move.w #$300,col0(a6)
-
- move.l #KeyMap,a5
- tst.b $45(a5)
- beq.s noend
- bra endnomusic
- noend:
-
- tst.w PLR1_energy
- ble end
- tst.w PLR2_energy
- ble end
-
- move.l SwitchData,a0
- tst.b 24+8(a0)
- bne end
-
- JSR STOPTIMER
-
- bra lop
-
- ***************************************************************************
- ***************************************************************************
- ****************** End of Main Loop here **********************************
- ***************************************************************************
- ***************************************************************************
-
- putinsmallscr:
- move.l #$1fe0000,statskip
- move.l #$1fe0000,statskip+4
-
- move.l #healthpal,a5
- move.l COPSCRN1,a0
- move.l COPSCRN2,a2
- move.w #scrheight-1,d0
- move.l #0,d6
- move.w #0,d3
- move.w #$2bdf,startwait
- move.w #$2d01,endwait
- .fillcop
- move.w #$180,d1
-
- move.l a0,a1
- move.l a2,a3
- move.w #$10c,(a1)+
- move.w #$10c,(a3)+
- move.w d3,(a1)+
- move.w d3,(a3)+
- eor.w #$8000,d3
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$2c42,d5
- or.w d3,d5
- and.w #$fffe,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$4c42,d5
- or.w d3,d5
- and.w #$fffe,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$6c42,d5
- or.w d3,d5
- and.w #$fffe,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
-
- move.l #$1060c42,(a1)+
- move.l #$1060c42,(a3)+
- move.w #$19e,(a1)+
- move.w (a5),(a1)+
- move.w #$19e,(a3)+
- move.w (a5)+,(a3)+
-
- **********************************
-
- adda.w #104*4,a0
- adda.w #104*4,a2
- dbra d0,.fillcop
-
- move.w #$48,fetchstart
- move.w #$88,fetchstop
- move.w #$2cb1,winstart
- move.w #$2c91,winstop
- move.w #-24,modulo
- move.w #-24,modulo+4
-
- move.l #nullspr,d0
- move.w d0,s4l
- move.w d0,s5l
- move.w d0,s6l
- move.w d0,s7l
- swap d0
- move.w d0,s4h
- move.w d0,s5h
- move.w d0,s6h
- move.w d0,s7h
-
- move.l #borders,d0
- move.w d0,s0l
- swap d0
- move.w d0,s0h
- move.l #borders+2592,d0
- move.w d0,s1l
- swap d0
- move.w d0,s1h
- move.l #borders+2592*2,d0
- move.w d0,s2l
- swap d0
- move.w d0,s2h
- move.l #borders+2592*3,d0
- move.w d0,s3l
- swap d0
- move.w d0,s3h
-
-
- move.l #scrn+40,a0
- move.l #scrn+160,a1
- move.l #scrn+280,a2
- move.l #smallscrntab,a3
- move.w #191,d7 ; counter
- move.w #0,d1 ; xpos
- .plotscrnloop:
- move.b (a3)+,d0
- move.w d1,d2
- asr.w #3,d2
- move.b d1,d3
- not.b d3
- bclr.b d3,-40(a0,d2.w)
- bclr.b d3,(a0,d2.w)
- bclr.b d3,40(a0,d2.w)
- bclr.b d3,-40(a1,d2.w)
- bclr.b d3,(a1,d2.w)
- bclr.b d3,40(a1,d2.w)
- bclr.b d3,-40(a2,d2.w)
- btst #0,d0
- beq.s .nobp1
- bset.b d3,-40(a0,d2.w)
- .nobp1:
- btst #1,d0
- beq.s .nobp2
- bset.b d3,(a0,d2.w)
- .nobp2:
- btst #2,d0
- beq.s .nobp3
- bset.b d3,40(a0,d2.w)
- .nobp3:
- btst #3,d0
- beq.s .nobp4
- bset.b d3,-40(a1,d2.w)
- .nobp4:
- btst #4,d0
- beq.s .nobp5
- bset.b d3,(a1,d2.w)
- .nobp5:
- btst #5,d0
- beq.s .nobp6
- bset.b d3,40(a1,d2.w)
- .nobp6:
- btst #6,d0
- beq.s .nobp7
- bset.b d3,-40(a2,d2.w)
- .nobp7:
-
- addq #1,d1
-
- dbra d7,.plotscrnloop
-
-
- rts
-
- putinlargescr:
-
- move.l #$1000000,statskip
- move.l #$fffffffe,statskip+4
-
- move.l #healthpal,a5
- move.l COPSCRN1,a0
- move.l COPSCRN2,a2
- move.w #scrheight-1,d0
- move.l #0,d6
- move.w #0,d3
- move.w #$29df,startwait
- move.w #$2b01,endwait
- .fillcop
- move.w #$180,d1
-
- move.l a0,a1
- move.l a2,a3
- move.w #$10c,(a1)+
- move.w #$10c,(a3)+
- move.w d3,(a1)+
- move.w d3,(a3)+
- eor.w #$8000,d3
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$2c42,d5
- or.w d3,d5
- and.w #$fffe,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$4c42,d5
- or.w d3,d5
- and.w #$fffe,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- move.w #$106,(a1)+
- move.w #$106,(a3)+
- move.w #$6c42,d5
- or.w d3,d5
- and.w #$fffe,d5
- move.w d5,(a1)+
- move.w d5,(a3)+
- bsr do32
-
- move.w startwait,(a1)+
- move.w #$fffe,(a1)+
- move.w endwait,(a1)+
- move.w #$ff00,(a1)+
- move.w startwait,(a3)+
- move.w #$fffe,(a3)+
- move.w endwait,(a3)+
- move.w #$ff00,(a3)+
-
-
- add.w #$300,startwait
- add.w #$300,endwait
-
- ; move.l #$1060c42,(a1)+
- ; move.l #$1060c42,(a3)+
- ; move.w #$19e,(a1)+
- ; move.w (a5),(a1)+
- ; move.w #$19e,(a3)+
- ; move.w (a5)+,(a3)+
-
- **********************************
-
- adda.w #104*4,a0
- adda.w #104*4,a2
- dbra d0,.fillcop
-
- move.w #$38,fetchstart
- move.w #$b8,fetchstop
- move.w #$2c81,winstart
- move.w #$2cc1,winstop
- move.w #-40,modulo
- move.w #-40,modulo+4
-
- move.l #nullspr,d0
- move.w d0,s0l
- move.w d0,s1l
- move.w d0,s2l
- move.w d0,s3l
- move.w d0,s4l
- move.w d0,s5l
- move.w d0,s6l
- move.w d0,s7l
- swap d0
- move.w d0,s0h
- move.w d0,s1h
- move.w d0,s2h
- move.w d0,s3h
- move.w d0,s4h
- move.w d0,s5h
- move.w d0,s6h
- move.w d0,s7h
-
- move.l #scrn+40,a0
- move.l #scrn+160,a1
- move.l #scrn+280,a2
- move.l #scrntab,a3
- move.w #319,d7 ; counter
- move.w #0,d1 ; xpos
- .plotscrnloop:
- move.b (a3)+,d0
- move.w d1,d2
- asr.w #3,d2
- move.b d1,d3
- not.b d3
- bclr.b d3,-40(a0,d2.w)
- bclr.b d3,(a0,d2.w)
- bclr.b d3,40(a0,d2.w)
- bclr.b d3,-40(a1,d2.w)
- bclr.b d3,(a1,d2.w)
- bclr.b d3,40(a1,d2.w)
- bclr.b d3,-40(a2,d2.w)
- btst #0,d0
- beq.s .nobp1
- bset.b d3,-40(a0,d2.w)
- .nobp1:
- btst #1,d0
- beq.s .nobp2
- bset.b d3,(a0,d2.w)
- .nobp2:
- btst #2,d0
- beq.s .nobp3
- bset.b d3,40(a0,d2.w)
- .nobp3:
- btst #3,d0
- beq.s .nobp4
- bset.b d3,-40(a1,d2.w)
- .nobp4:
- btst #4,d0
- beq.s .nobp5
- bset.b d3,(a1,d2.w)
- .nobp5:
- btst #5,d0
- beq.s .nobp6
- bset.b d3,40(a1,d2.w)
- .nobp6:
- btst #6,d0
- beq.s .nobp7
- bset.b d3,-40(a2,d2.w)
- .nobp7:
-
- addq #1,d1
-
- dbra d7,.plotscrnloop
-
-
-
-
- rts
-
- READCONTROLS: dc.w 0
-
- tstststst: dc.w 0
-
- BollocksRoom:
- dc.w -1
- ds.l 50
-
- USEPLR1:
-
- ***********************************
-
- move.l PLR1_Obj,a0
- move.l ObjectPoints,a1
- move.l #ObjRotated,a2
- move.w (a0),d0
- move.l PLR1_xoff,(a1,d0.w*8)
- move.l PLR1_zoff,4(a1,d0.w*8)
- move.l PLR1_Roompt,a1
-
- move.b damagetaken(a0),d2
- beq .notbeenshot
- move.w #$f00,hitcol
- move.w #$f00,hitcol2
- ext.w d2
- sub.w d2,PLR1_energy
- movem.l d0-d7/a0-a6,-(a7)
- move.b #$fb,IDNUM
- move.w #19,Samplenum
- clr.b notifplaying
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #100,Noisevol
- jsr MakeSomeNoise
-
- movem.l (a7)+,d0-d7/a0-a6
-
- .notbeenshot
- move.b #0,damagetaken(a0)
- move.b PLR1_energy+1,numlives(a0)
-
- move.b PLR1_StoodInTop,ObjInTop(a0)
-
- move.w (a1),12(a0)
- move.w (a1),d2
- move.l #ZoneBrightTable,a1
- move.l (a1,d2.w*4),d2
- tst.b PLR1_StoodInTop
- bne.s .okinbott
- swap d2
- .okinbott:
-
- move.w d2,2(a0)
-
- move.l PLR1_yoff,d0
- move.l PLR1_height,d1
- asr.l #1,d1
- add.l d1,d0
- asr.l #7,d0
- move.w d0,4(a0)
-
- ***********************************
-
- move.l PLR2_Obj,a0
-
- move.w PLR2_angpos,d0
- and.w #8190,d0
- move.w d0,Facing(a0)
-
- jsr ViewpointToDraw
- asl.w #2,d0
- moveq #0,d1
- move.b p2_bobble,d1
- not.b d1
- lsr.b #3,d1
- and.b #$3,d1
- add.w d1,d0
- move.w d0,10(a0)
-
- move.w #10,8(a0)
-
- move.l ObjectPoints,a1
- move.l #ObjRotated,a2
- move.w (a0),d0
- move.l PLR2_xoff,(a1,d0.w*8)
- move.l PLR2_zoff,4(a1,d0.w*8)
- move.l PLR2_Roompt,a1
-
- move.b damagetaken(a0),d2
- beq .notbeenshot2
- ext.w d2
- sub.w d2,PLR2_energy
- .notbeenshot2
- move.b #0,damagetaken(a0)
- move.b PLR2_energy+1,numlives(a0)
-
- move.b PLR2_StoodInTop,ObjInTop(a0)
-
- move.w (a1),12(a0)
- move.w (a1),d2
- move.l #ZoneBrightTable,a1
- move.l (a1,d2.w*4),d2
- tst.b PLR2_StoodInTop
- bne.s .okinbott2
- swap d2
- .okinbott2:
-
- move.w d2,2(a0)
-
- move.l PLR2_yoff,d0
- move.l PLR2_height,d1
- asr.l #1,d1
- add.l d1,d0
- asr.l #7,d0
- move.w d0,4(a0)
-
- **********************************
-
- move.l PLR1_Obj,a0
- move.w PLR1_sinval,d4
- muls #100,d4
- move.w PLR1_cosval,d5
- muls #100,d5
-
- move.b PLR1_GunSelected,d0
- asl.b #2,d0
- add.b PLR1_GunFrame,d0
- move.b d0,11+128(a0)
-
- tst.b PLR1_GunFrame
- beq.s .noless
- subq.b #1,PLR1_GunFrame
- .noless:
-
- move.b ObjInTop(a0),ObjInTop+128(a0)
-
- move.l ObjectPoints,a1
- move.w 128(a0),d0
- move.l PLR1_xoff,d1
- add.l d4,d1
- move.l d1,(a1,d0.w*8)
- move.l PLR1_zoff,d1
- add.l d5,d1
- move.l d1,4(a1,d0.w*8)
- move.w 4(a0),d0
- move.l PLR1_height,d1
- asr.l #8,d1
- sub.w d1,d0
-
- add.w #16,d0
- move.w d0,4+128(a0)
- move.w #$2010,6+128(a0)
-
- move.w 12(a0),12+128(a0)
-
- move.w 2(a0),2+128(a0)
-
- rts
-
- ***************************************************
- **************************************************
-
- USEPLR2:
-
- ***********************************
-
- move.l PLR2_Obj,a0
- move.l ObjectPoints,a1
- move.l #ObjRotated,a2
- move.w (a0),d0
- move.l PLR2_xoff,(a1,d0.w*8)
- move.l PLR2_zoff,4(a1,d0.w*8)
- move.l PLR2_Roompt,a1
-
- move.b damagetaken(a0),d2
- beq .notbeenshot
- move.w #$f00,hitcol
- move.w #$f00,hitcol2
- ext.w d2
- sub.w d2,PLR2_energy
- movem.l d0-d7/a0-a6,-(a7)
- move.w #19,Samplenum
- clr.b notifplaying
- move.b #$fb,IDNUM
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #100,Noisevol
- jsr MakeSomeNoise
-
- movem.l (a7)+,d0-d7/a0-a6
-
- .notbeenshot
- move.b #0,damagetaken(a0)
- move.b PLR2_energy+1,numlives(a0)
-
- move.b PLR2_StoodInTop,ObjInTop(a0)
-
- move.w (a1),12(a0)
- move.w (a1),d2
- move.l #ZoneBrightTable,a1
- move.l (a1,d2.w*4),d2
- tst.b PLR1_StoodInTop
- bne.s .okinbott
- swap d2
- .okinbott:
-
- move.w d2,2(a0)
-
- move.l PLR2_yoff,d0
- move.l PLR2_height,d1
- asr.l #1,d1
- add.l d1,d0
- asr.l #7,d0
- move.w d0,4(a0)
-
- ***********************************
-
- move.l PLR1_Obj,a0
-
- move.w PLR1_angpos,d0
- and.w #8190,d0
- move.w d0,Facing(a0)
-
- jsr ViewpointToDraw
- asl.w #2,d0
- moveq #0,d1
- move.b p1_bobble,d1
- not.b d1
- lsr.b #3,d1
- and.b #$3,d1
- add.w d1,d0
- move.w d0,10(a0)
- move.w #10,8(a0)
-
-
- move.l ObjectPoints,a1
- move.l #ObjRotated,a2
- move.w (a0),d0
- move.l PLR1_xoff,(a1,d0.w*8)
- move.l PLR1_zoff,4(a1,d0.w*8)
- move.l PLR1_Roompt,a1
-
- move.b damagetaken(a0),d2
- beq .notbeenshot2
- ext.w d2
- sub.w d2,PLR1_energy
- .notbeenshot2
- move.b #0,damagetaken(a0)
- move.b PLR1_energy+1,numlives(a0)
-
- move.b PLR1_StoodInTop,ObjInTop(a0)
-
- move.w (a1),12(a0)
- move.w (a1),d2
- move.l #ZoneBrightTable,a1
- move.l (a1,d2.w*4),d2
- tst.b PLR1_StoodInTop
- bne.s .okinbott2
- swap d2
- .okinbott2:
-
- move.w d2,2(a0)
-
- move.l PLR1_yoff,d0
- move.l PLR1_height,d1
- asr.l #1,d1
- add.l d1,d0
- asr.l #7,d0
- move.w d0,4(a0)
-
- **********************************
-
- move.l PLR2_Obj,a0
- move.w PLR2_sinval,d4
- muls #100,d4
- move.w PLR2_cosval,d5
- muls #100,d5
-
- move.b PLR2_GunSelected,d0
- asl.b #2,d0
- add.b PLR2_GunFrame,d0
- move.b d0,11+64(a0)
-
- tst.b PLR2_GunFrame
- beq.s .noless
- subq.b #1,PLR2_GunFrame
- .noless:
- move.b ObjInTop(a0),ObjInTop+64(a0)
-
- move.l ObjectPoints,a1
- move.w 64(a0),d0
- move.l PLR2_xoff,d1
- add.l d4,d1
- move.l d1,(a1,d0.w*8)
- move.l PLR2_zoff,d1
- add.l d5,d1
- move.l d1,4(a1,d0.w*8)
- move.w 4(a0),d0
- move.l PLR2_height,d1
- asr.l #8,d1
- sub.w d1,d0
- add.w #16,d0
- move.w d0,4+64(a0)
- move.w #$2010,6+64(a0)
-
- move.w 12(a0),12+64(a0)
-
- move.w 2(a0),2+64(a0)
-
- rts
-
-
- GunSelected: dc.b 0
- even
-
- GunData: dc.l 0
-
- PLR1_GunData:
- ; 0=Pistol 1=Big Gun
- ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
-
- ; VISIBLE/INSTANT (0/FF)
- ; damage,gotgun(b)
- ; Delay (w), Lifetime of bullet (w)
- ; Click or hold down (0,1)
- ; BulSpd: (w)
-
- ;0
- dc.w 0
- ;2
- dc.b 8,3
- ;4
- dc.b 20
- ;5
- dc.b -1
- ;6
- dc.b 1,$ff
- ;8
- dc.w 5,-1,1,0
- dc.w 0,0
-
- ds.w 6
-
- dc.w 0
- dc.b 8,1
- dc.b 40
- dc.b 0
- dc.b 4,0
- dc.w 10,-1,0,5
- dc.w 0,0
-
- ds.w 6
-
- dc.w 0
- dc.b 8,9
- dc.b 5
- dc.b 0
- dc.b 10,0
- dc.w 50,-1,0,5
- dc.w 0,0
-
- ds.w 6
-
- dc.w 90*8
- dc.b 1,22
- dc.b 40
- dc.b 0
- dc.b 4,$0
- dc.w 0,0,1,4
- dc.w 0,0
-
- ds.w 6
-
- dc.w 90*8
- dc.b 1,9
- dc.b 10
- dc.b 0
- dc.b 2,$FF
- dc.w 50,100,0,5
- dc.w 60,1
- dc.w -1000
-
- ds.w 5
-
-
- PLR2_GunData:
- ; 0=Pistol 1=Big Gun
- ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
-
- ; VISIBLE/INSTANT (0/FF)
- ; damage,gotgun(b)
- ; Delay (w)
-
- dc.w 0
- dc.b 8,3
- dc.b 20
- dc.b -1
- dc.b 1,$ff
- dc.w 5,-1,1,0
- dc.w 0,0
-
- ds.w 6
-
- dc.w 0
- dc.b 8,1
- dc.b 40
- dc.b 0
- dc.b 4,0
- dc.w 10,-1,0,5
- dc.w 0,0
-
- ds.w 6
-
- dc.w 0
- dc.b 8,9
- dc.b 5
- dc.b 0
- dc.b 10,0
- dc.w 50,-1,0,5
- dc.w 0,0
-
- ds.w 6
-
- dc.w 90*8
- dc.b 1,22
- dc.b 40
- dc.b 0
- dc.b 4,0
- dc.w 0,-1,1,4
- dc.w 0,0
-
- ds.w 6
-
- dc.w 90*8
- dc.b 1,9
- dc.b 10
- dc.b 0
- dc.b 2,$ff
- dc.w 50,100,0,5
- dc.w 60
- dc.b 64,1
- dc.w -1000
-
- ds.w 5
-
- protA: dc.w 0
-
- Path:
- ; incbin "testpath"
- endpath:
- pathpt: dc.l Path
-
-
- PLR1KEYS: dc.b 0
- PLR1PATH: dc.b 0
- PLR1MOUSE: dc.b -1
- PLR1JOY: dc.b 0
- PLR2KEYS: dc.b 0
- PLR2PATH: dc.b 0
- PLR2MOUSE: dc.b -1
- PLR2JOY: dc.b 0
-
- even
-
- PLR1_bobble: dc.w 0
- PLR2_bobble: dc.w 0
- xwobble: dc.l 0
- xwobxoff: dc.w 0
- xwobzoff: dc.w 0
-
- PLR1_Control:
-
- ; Take a snapshot of everything.
-
- move.l PLR1_xoff,d2
- move.l d2,PLR1_oldxoff
- move.l d2,oldx
- move.l PLR1_zoff,d3
- move.l d3,PLR1_oldzoff
- move.l d3,oldz
- move.l p1_xoff,d0
- move.l d0,PLR1_xoff
- move.l d0,newx
- move.l p1_zoff,d1
- move.l d1,newz
- move.l d1,PLR1_zoff
-
- move.l p1_height,PLR1_height
-
- sub.l d2,d0
- sub.l d3,d1
- move.l d0,xdiff
- move.l d1,zdiff
- move.w p1_angpos,d0
- move.w d0,PLR1_angpos
-
- move.l #SineTable,a1
- move.w (a1,d0.w),PLR1_sinval
- add.w #2048,d0
- and.w #8190,d0
- move.w (a1,d0.w),PLR1_cosval
-
- move.l p1_yoff,d0
- move.w p1_bobble,d1
- move.w (a1,d1.w),d1
- move.w d1,d3
- ble.s notnegative
- neg.w d1
- notnegative:
- add.w #16384,d1
- asr.w #4,d1
- add.w d1,d1
- ext.l d1
- add.l d1,d0
-
- asr.w #6,d3
- ext.l d3
- move.l d3,xwobble
- move.w PLR1_sinval,d1
- muls d3,d1
- move.w PLR1_cosval,d2
- muls d3,d2
- swap d1
- swap d2
- asr.w #7,d1
- move.w d1,xwobxoff
- asr.w #7,d2
- neg.w d2
- move.w d2,xwobzoff
-
-
- move.l d0,PLR1_yoff
- move.l d0,newy
- move.l d0,oldy
- move.l PLR1_height,thingheight
- move.l #40*256,StepUpVal
- tst.b PLR1_Ducked
- beq.s .okbigstep
- move.l #10*256,StepUpVal
- .okbigstep:
-
- move.l #$1000000,StepDownVal
-
- move.l PLR1_Roompt,a0
- move.w ToTelZone(a0),d0
- blt .noteleport
-
- move.w ToTelX(a0),newx
- move.w ToTelZ(a0),newz
- move.w #-1,CollId
- move.w #%111111111111,CollideFlags
- bsr Collision
- tst.b hitwall
- beq.s .teleport
-
- move.w PLR1_xoff,newx
- move.w PLR1_zoff,newz
- bra .noteleport
-
- .teleport:
-
- move.l PLR1_Roompt,a0
- move.w ToTelZone(a0),d0
- move.w ToTelX(a0),PLR1_xoff
- move.w ToTelZ(a0),PLR1_zoff
- move.l PLR1_yoff,d1
- sub.l ToZoneFloor(a0),d1
- move.l ZoneAdds,a0
- move.l (a0,d0.w*4),a0
- add.l LEVELDATA,a0
- move.l a0,PLR1_Roompt
- add.l ToZoneFloor(a0),d1
- move.l d1,PLR1s_yoff
- move.l d1,PLR1_yoff
- move.l d1,PLR1s_tyoff
- move.l PLR1_xoff,PLR1s_xoff
- move.l PLR1_zoff,PLR1s_zoff
-
- SAVEREGS
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #26,Samplenum
- move.w #100,Noisevol
- move.b #$fa,IDNUM
- jsr MakeSomeNoise
- GETREGS
-
- bra .cantmove
-
- .noteleport:
-
- move.l PLR1_Roompt,objroom
- move.w #%100000000,wallflags
- move.b PLR1_StoodInTop,StoodInTop
-
- move.w #%110111000001,CollideFlags
- move.w #-1,CollId
-
- bsr Collision
- tst.b hitwall
- beq.s .nothitanything
- move.w oldx,PLR1_xoff
- move.w oldz,PLR1_zoff
- move.l PLR1_xoff,PLR1s_xoff
- move.l PLR1_zoff,PLR1s_zoff
- bra .cantmove
- .nothitanything:
-
- move.w #40,extlen
- move.b #0,awayfromwall
-
- clr.b exitfirst
- bsr MoveObject
- move.b StoodInTop,PLR1_StoodInTop
- move.l objroom,PLR1_Roompt
- move.w newx,PLR1_xoff
- move.w newz,PLR1_zoff
- move.l PLR1_xoff,PLR1s_xoff
- move.l PLR1_zoff,PLR1s_zoff
-
- .cantmove:
-
- move.l PLR1_Roompt,a0
-
- move.l ToZoneFloor(a0),d0
- tst.b PLR1_StoodInTop
- beq.s notintop
- move.l ToUpperFloor(a0),d0
- notintop:
-
- adda.w #ToZonePts,a0
- sub.l PLR1_height,d0
- move.l d0,PLR1s_tyoff
- move.w p1_angpos,tmpangpos
-
- ; move.l (a0),a0 ; jump to viewpoint list
- * A0 is pointing at a pointer to list of points to rotate
- move.w (a0)+,d1
- ext.l d1
- add.l PLR1_Roompt,d1
- move.l d1,PLR1_PointsToRotatePtr
- tst.w (a0)+
- beq.s nobackgraphics
- move.l a0,-(a7)
- jsr putinbackdrop
- move.l (a7)+,a0
- nobackgraphics:
- adda.w #10,a0
- move.l a0,PLR1_ListOfGraphRooms
-
- *****************************************************
- rts
-
- CollId: dc.w 0
-
- PLR2_Control:
-
- ; Take a snapshot of everything.
-
- move.l PLR2_xoff,d2
- move.l d2,PLR2_oldxoff
- move.l d2,oldx
- move.l PLR2_zoff,d3
- move.l d3,PLR2_oldzoff
- move.l d3,oldz
- move.l p2_xoff,d0
- move.l d0,PLR2_xoff
- move.l d0,newx
- move.l p2_zoff,d1
- move.l d1,newz
- move.l d1,PLR2_zoff
-
- move.l p2_height,PLR2_height
-
- sub.l d2,d0
- sub.l d3,d1
- move.l d0,xdiff
- move.l d1,zdiff
- move.w p2_angpos,d0
- move.w d0,PLR2_angpos
-
- move.l #SineTable,a1
- move.w (a1,d0.w),PLR2_sinval
- add.w #2048,d0
- and.w #8190,d0
- move.w (a1,d0.w),PLR2_cosval
-
- move.l p2_yoff,d0
- move.w p2_bobble,d1
- move.w (a1,d1.w),d1
- move.w d1,d3
- ble.s .notnegative
- neg.w d1
- .notnegative:
- add.w #16384,d1
- asr.w #4,d1
- add.w d1,d1
- ext.l d1
- add.l d1,d0
-
- asr.w #6,d3
- ext.l d3
- move.l d3,xwobble
- move.w PLR2_sinval,d1
- muls d3,d1
- move.w PLR2_cosval,d2
- muls d3,d2
- swap d1
- swap d2
- asr.w #7,d1
- move.w d1,xwobxoff
- asr.w #7,d2
- neg.w d2
- move.w d2,xwobzoff
-
-
- move.l d0,PLR2_yoff
- move.l d0,newy
- move.l d0,oldy
- move.l PLR2_height,thingheight
- move.l #40*256,StepUpVal
- tst.b PLR2_Ducked
- beq.s .okbigstep
- move.l #10*256,StepUpVal
- .okbigstep:
-
- move.l #$1000000,StepDownVal
-
- move.l PLR2_Roompt,a0
- move.w ToTelZone(a0),d0
- blt .noteleport
-
- move.w ToTelX(a0),newx
- move.w ToTelZ(a0),newz
- move.w #-1,CollId
- move.w #%111111111111,CollideFlags
- bsr Collision
- tst.b hitwall
- beq.s .teleport
-
- move.w PLR2_xoff,newx
- move.w PLR2_zoff,newz
- bra .noteleport
-
- .teleport:
-
- move.l PLR2_Roompt,a0
- move.w ToTelZone(a0),d0
- move.w ToTelX(a0),PLR2_xoff
- move.w ToTelZ(a0),PLR2_zoff
- move.l PLR2_yoff,d1
- sub.l ToZoneFloor(a0),d1
- move.l ZoneAdds,a0
- move.l (a0,d0.w*4),a0
- add.l LEVELDATA,a0
- move.l a0,PLR2_Roompt
- add.l ToZoneFloor(a0),d1
- move.l d1,PLR2s_yoff
- move.l d1,PLR2_yoff
- move.l d1,PLR2s_tyoff
- move.l PLR2_xoff,PLR2s_xoff
- move.l PLR2_zoff,PLR2s_zoff
-
- SAVEREGS
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #26,Samplenum
- move.w #100,Noisevol
- move.b #$fa,IDNUM
- jsr MakeSomeNoise
- GETREGS
-
- bra .cantmove
-
- .noteleport:
-
-
- move.l PLR2_Roompt,objroom
- move.w #%100000000000,wallflags
- move.b PLR2_StoodInTop,StoodInTop
-
- move.w #%010111100001,CollideFlags
- move.w #-1,CollId
-
- bsr Collision
- tst.b hitwall
- beq.s .nothitanything
- move.w oldx,PLR2_xoff
- move.w oldz,PLR2_zoff
- move.l PLR2_xoff,PLR2s_xoff
- move.l PLR2_zoff,PLR2s_zoff
- bra .cantmove
- .nothitanything:
-
- move.w #40,extlen
- move.b #0,awayfromwall
-
- clr.b exitfirst
- bsr MoveObject
- move.b StoodInTop,PLR2_StoodInTop
- move.w #0,wallflags
- move.l objroom,PLR2_Roompt
- move.w newx,PLR2_xoff
- move.w newz,PLR2_zoff
- move.l PLR2_xoff,PLR2s_xoff
- move.l PLR2_zoff,PLR2s_zoff
-
- .cantmove
-
- move.l PLR2_Roompt,a0
-
- move.l ToZoneFloor(a0),d0
- tst.b PLR2_StoodInTop
- beq.s .notintop
- move.l ToUpperFloor(a0),d0
- .notintop:
-
- adda.w #ToZonePts,a0
- sub.l PLR2_height,d0
- move.l d0,PLR2s_tyoff
- move.w p2_angpos,tmpangpos
-
- ; move.l (a0),a0 ; jump to viewpoint list
- * A0 is pointing at a pointer to list of points to rotate
- move.w (a0)+,d1
- ext.l d1
- add.l PLR2_Roompt,d1
- move.l d1,PLR2_PointsToRotatePtr
- tst.w (a0)+
- beq.s .nobackgraphics
- move.l a0,-(a7)
- jsr putinbackdrop
- move.l (a7)+,a0
- .nobackgraphics:
- adda.w #10,a0
- move.l a0,PLR2_ListOfGraphRooms
-
- *****************************************************
-
- rts
-
-
- KeyMap: ds.b 256
-
-
- DrawDisplay:
-
- move.l #SineTable,a0
- move.w angpos,d0
- move.w (a0,d0.w),d6
- adda.w #2048,a0
- move.w (a0,d0.w),d7
- move.w d6,sinval
- move.w d7,cosval
-
- move.l yoff,d0
- asr.l #8,d0
- move.w d0,d1
- add.w #256-32,d1
- and.w #255,d1
- move.w d1,wallyoff
- asl.w #2,d0
- move.w d0,flooryoff
-
- move.w xoff,d6
- move.w d6,d3
- asr.w #1,d3
- add.w d3,d6
- asr.w #1,d6
- move.w d6,xoff34
-
- move.w zoff,d6
- move.w d6,d3
- asr.w #1,d3
- add.w d3,d6
- asr.w #1,d6
- move.w d6,zoff34
-
- bsr RotateLevelPts
- bsr RotateObjectPts
- bsr CalcPLR1InLine
- cmp.b #'n',mors
- bne.s doplr2too
- move.l PLR2_Obj,a0
- move.w #-1,12(a0)
- move.w #-1,GraphicRoom(a0)
- bra noplr2either
-
- doplr2too:
- bsr CalcPLR2InLine
- noplr2either:
-
- move.l endoflist,a0
- subroomloop:
- move.w -(a0),d7
- blt jumpoutofrooms
-
- ; bsr setlrclip
- ; move.w leftclip,d0
- ; cmp.w rightclip,d0
- ; bge subroomloop
- move.l a0,-(a7)
-
- move.l ZoneAdds,a0
- move.l (a0,d7.w*4),a0
- add.l LEVELDATA,a0
- move.l ToZoneRoof(a0),SplitHeight
-
- move.l ZoneGraphAdds,a0
- move.l 4(a0,d7.w*8),a2
- move.l (a0,d7.w*8),a0
-
- add.l LEVELGRAPHICS,a0
- add.l LEVELGRAPHICS,a2
- move.l a2,ThisRoomToDraw+4
- move.l a0,ThisRoomToDraw
-
- move.l ListOfGraphRooms,a1
-
- finditit:
- tst.w (a1)
- blt nomoretodoatall
- cmp.w (a1),d7
- beq outoffind
- adda.w #8,a1
- bra finditit
-
- outoffind:
-
- move.l a1,-(a7)
-
- move.w #0,leftclip
- move.w #96,rightclip
- moveq #0,d7
- move.w 2(a1),d7
- blt.s outofrcliplop
- move.l LEVELCLIPS,a0
- lea (a0,d7.l*2),a0
-
- tst.w (a0)
- blt outoflcliplop
-
- bsr NEWsetlclip
-
- intolcliplop: ; clips
- tst.w (a0)
- blt outoflcliplop
-
- bsr NEWsetlclip
- bra intolcliplop
-
- outoflcliplop:
-
- addq #2,a0
-
- tst.w (a0)
- blt outofrcliplop
-
- bsr NEWsetrclip
-
- intorcliplop: ; clips
- tst.w (a0)
- blt outofrcliplop
-
- bsr NEWsetrclip
- bra intorcliplop
-
- outofrcliplop:
-
- move.w leftclip,d0
- cmp.w #95,d0
- bge dontbothercantseeit
- move.w rightclip,d1
- blt dontbothercantseeit
- cmp.w d1,d0
- bge dontbothercantseeit
-
- move.l yoff,d0
- cmp.l SplitHeight,d0
- blt.s botfirst
-
- move.l ThisRoomToDraw+4,a0
- cmp.l LEVELGRAPHICS,a0
- beq.s noupperroom
- st DOUPPER
- move.l #CurrentPointBrights+2,PointBrightsPtr
- bsr dothisroom
- noupperroom:
- move.l ThisRoomToDraw,a0
- clr.b DOUPPER
- move.l #CurrentPointBrights,PointBrightsPtr
- bsr dothisroom
-
- bra dontbothercantseeit
- botfirst:
-
- move.l ThisRoomToDraw,a0
- clr.b DOUPPER
- move.l #CurrentPointBrights,PointBrightsPtr
- bsr dothisroom
- move.l ThisRoomToDraw+4,a0
- cmp.l LEVELGRAPHICS,a0
- beq.s noupperroom2
- move.l #CurrentPointBrights+2,PointBrightsPtr
- st DOUPPER
- bsr dothisroom
- noupperroom2:
-
- dontbothercantseeit:
- pastemp:
-
- move.l (a7)+,a1
- move.l ThisRoomToDraw,a0
- move.w (a0),d7
- adda.w #8,a1
- bra finditit
-
- nomoretodoatall:
-
- move.l (a7)+,a0
-
- bra subroomloop
-
- jumpoutofrooms:
-
- rts
-
- prot9: dc.w 0
-
- TempBuffer: ds.l 100
-
- ClipTable: ds.l 30
- EndOfClipPt: dc.l 0
- DOUPPER: dc.w 0
-
- dothisroom
-
- move.w (a0)+,d0
- move.w d0,currzone
- move.l #ZoneBrightTable,a1
- move.l (a1,d0.w*4),d1
- tst.b DOUPPER
- bne.s .okbot
- swap d1
- .okbot:
- move.w d1,ZoneBright
-
- polyloop:
- move.w (a0)+,d0
- blt jumpoutofloop
- beq itsawall
- cmp.w #3,d0
- beq itsasetclip
- blt itsafloor
- cmp.w #4,d0
- beq itsanobject
- cmp.w #5,d0
- beq.s itsanarc
- cmp.w #6,d0
- beq itsalightbeam
- cmp.w #7,d0
- beq.s itswater
- cmp.w #9,d0
- ble itsachunkyfloor
- cmp.w #11,d0
- ble.s itsabumpyfloor
- cmp.w #12,d0
- beq.s itsbackdrop
- cmp.w #13,d0
- beq.s itsaseewall
-
- bra polyloop
-
- itsaseewall:
- st seethru
- jsr itsawalldraw
- bra polyloop
-
- itsbackdrop:
- jsr putinbackdrop
- bra polyloop
-
- itswater:
- move.w #1,d0
- clr.b gourfloor
- move.l #FloorLine,LineToUse
- st usewater
- clr.b usebumps
- jsr itsafloordraw
- bra polyloop
-
- itsanarc:
- jsr CurveDraw
- bra polyloop
- itsanobject:
- jsr ObjDraw
- bra polyloop
- itsalightbeam:
- jsr LightDraw
- bra polyloop
-
- itsabumpyfloor:
- sub.w #9,d0
- st usebumps
- st smoothbumps
- clr.b usewater
- move.l #BumpLine,LineToUse
- jsr itsafloordraw
- bra polyloop
-
- itsachunkyfloor:
- subq.w #7,d0
- st usebumps
- sub.w #12,topclip
- ; add.w #10,botclip
- clr.b smoothbumps
- clr.b usewater
- move.l #BumpLine,LineToUse
- jsr itsafloordraw
- add.w #12,topclip
- ; sub.w #10,botclip
- bra polyloop
-
- itsafloor:
-
- move.l #FloorLine,LineToUse
- * 1,2 = floor/roof
- clr.b usewater
- clr.b usebumps
- st.b gourfloor
- jsr itsafloordraw
- bra polyloop
- itsasetclip:
- bra polyloop
- itsawall:
- clr.b seethru
- ; move.l #stripbuffer,a1
- jsr itsawalldraw
- bra polyloop
-
- jumpoutofloop:
- rts
-
- ThisRoomToDraw: dc.l 0,0
- SplitHeight: dc.l 0
-
- include "ab3:source/OrderZones"
-
- ReadMouse:
- move.l #$dff000,a6
- clr.l d0
- clr.l d1
- move.w $a(a6),d0
- lsr.w #8,d0
- ext.l d0
- move.w d0,d3
- move.w oldmy,d2
- sub.w d2,d0
-
- cmp.w #127,d0
- blt nonegy
- move.w #255,d1
- sub.w d0,d1
- move.w d1,d0
- neg.w d0
- nonegy:
-
- cmp.w #-127,d0
- bge nonegy2
- move.w #255,d1
- add.w d0,d1
- move.w d1,d0
- nonegy2:
-
- add.b d0,d2
- add.w d0,oldy2
- move.w d2,oldmy
- move.w d2,d0
-
- move.w oldy2,d0
- move.w d0,ymouse
-
- clr.l d0
- clr.l d1
- move.w $a(a6),d0
- ext.w d0
- ext.l d0
- move.w d0,d3
- move.w oldmx,d2
- sub.w d2,d0
-
- cmp.w #127,d0
- blt nonegx
- move.w #255,d1
- sub.w d0,d1
- move.w d1,d0
- neg.w d0
- nonegx:
-
- cmp.w #-127,d0
- bge nonegx2
- move.w #255,d1
- add.w d0,d1
- move.w d1,d0
- nonegx2:
-
- add.b d0,d2
- move.w d0,d1
- move.w d2,oldmx
-
- move.w #$0,$dff034
- btst #2,$dff016
- beq.s noturn
-
- add.w d0,oldx2
- move.w oldx2,d0
- and.w #2047,d0
- move.w d0,oldx2
-
- asl.w #2,d0
- sub.w prevx,d0
- add.w d0,prevx
- add.w d0,PLR1s_angpos
- move.w #0,lrs
- rts
-
- noturn:
-
- ; got to move lr instead.
-
- ; d1 = speed moved l/r
-
- move.w d1,lrs
-
- rts
-
- lrs: dc.w 0
- prevx: dc.w 0
-
- mang: dc.w 0
- oldymouse: dc.w 0
- xmouse: dc.w 0
- ymouse: dc.w 0
- oldx2: dc.w 0
- oldmx: dc.w 0
- oldmy: dc.w 0
- oldy2: dc.w 0
-
- RotateLevelPts:
-
- move.w sinval,d6
- swap d6
- move.w cosval,d6
-
- move.l PointsToRotatePtr,a0
- move.l Points,a3
- move.l #Rotated,a1
- move.l #OnScreen,a2
- move.w xoff,d4
- move.w zoff,d5
-
- ; move.w #$c40,$dff106
- ; move.w #$f00,$dff180
-
- pointrotlop:
- move.w (a0)+,d7
- blt.s outofpointrot
-
- move.w (a3,d7*4),d0
- sub.w d4,d0
- move.w d0,d2
- move.w 2(a3,d7*4),d1
- sub.w d5,d1
- muls d6,d2
- swap d6
- move.w d1,d3
- muls d6,d3
- sub.l d3,d2
- add.l d2,d2
- swap d2
- ext.l d2
- asl.l #7,d2
- add.l xwobble,d2
- move.l d2,(a1,d7*8)
-
- muls d6,d0
- swap d6
- muls d6,d1
- add.l d0,d1
- asl.l #2,d1
- swap d1
- move.l d1,4(a1,d7*8)
-
- tst.w d1
- bgt.s ptnotbehind
- tst.w d2
- bgt.s onrightsomewhere
- move.w #0,d2
- bra putin
- onrightsomewhere:
- move.w #96,d2
- bra putin
- ptnotbehind:
-
- divs d1,d2
- add.w #47,d2
- putin:
- move.w d2,(a2,d7*2)
-
- bra pointrotlop
- outofpointrot:
-
- ; move.w #$c40,$dff106
- ; move.w #$ff0,$dff180
-
- rts
-
- PLR1_ObjDists
- ds.w 200
- PLR2_ObjDists
- ds.w 200
-
- CalcPLR1InLine:
-
- move.w PLR1_sinval,d5
- move.w PLR1_cosval,d6
- move.l ObjectData,a4
- move.l ObjectPoints,a0
- move.w NumObjectPoints,d7
- move.l #PLR1_ObsInLine,a2
- move.l #PLR1_ObjDists,a3
-
- .objpointrotlop:
-
- move.w (a0),d0
- sub.w PLR1_xoff,d0
- move.w 4(a0),d1
- addq #8,a0
-
- tst.w 12(a4)
- blt .noworkout
-
- sub.w PLR1_zoff,d1
- move.w d0,d2
- muls d6,d2
- move.w d1,d3
- muls d5,d3
- sub.l d3,d2
- add.l d2,d2
- swap d2
-
- muls d5,d0
- muls d6,d1
- add.l d0,d1
- asl.l #2,d1
- swap d1
- moveq #0,d3
-
- ext.l d2
- tst.w d1
- ble.s .notinline
- cmp.w #40,d2
- bgt.s .notinline
- cmp.w #-40,d2
- blt.s .notinline
-
-
- st d3
- .notinline
- move.b d3,(a2)+
-
- move.w d1,(a3)+
-
- add.w #64,a4
- dbra d7,.objpointrotlop
-
- rts
-
- .noworkout:
- move.b #0,(a2)+
- move.w #0,(a3)+
- add.w #64,a4
- dbra d7,.objpointrotlop
- rts
-
-
- CalcPLR2InLine:
-
- move.w PLR2_sinval,d5
- move.w PLR2_cosval,d6
- move.l ObjectData,a4
- move.l ObjectPoints,a0
- move.w NumObjectPoints,d7
- move.l #PLR2_ObsInLine,a2
- move.l #PLR2_ObjDists,a3
-
- .objpointrotlop:
-
- move.w (a0),d0
- sub.w PLR2_xoff,d0
- move.w 4(a0),d1
- addq #8,a0
-
- tst.w 12(a4)
- blt .noworkout
-
- sub.w PLR2_zoff,d1
- move.w d0,d2
- muls d6,d2
- move.w d1,d3
- muls d5,d3
- sub.l d3,d2
- add.l d2,d2
- swap d2
-
- muls d5,d0
- muls d6,d1
- add.l d0,d1
- asl.l #2,d1
- swap d1
- moveq #0,d3
-
- ext.l d2
- asl.l #7,d2
- tst.w d1
- ble.s .notinline
-
- divs d1,d2
- cmp.w #20,d2
- bgt.s .notinline
- cmp.w #-20,d2
- blt.s .notinline
- st d3
- .notinline
- move.b d3,(a2)+
-
- move.w d1,(a3)+
-
- add.w #64,a4
- dbra d7,.objpointrotlop
-
- rts
-
- .noworkout:
- move.w #0,(a3)+
- move.b #0,(a2)+
- add.w #64,a4
- dbra d7,.objpointrotlop
- rts
-
-
- RotateObjectPts:
-
- move.w sinval,d5
- move.w cosval,d6
-
- move.l ObjectData,a4
- move.l ObjectPoints,a0
- move.w NumObjectPoints,d7
- move.l #ObjRotated,a1
-
-
- .objpointrotlop:
-
- move.w (a0),d0
- sub.w xoff,d0
- move.w 4(a0),d1
- addq #8,a0
-
- tst.w 12(a4)
- blt .noworkout
-
- sub.w zoff,d1
- move.w d0,d2
- muls d6,d2
- move.w d1,d3
- muls d5,d3
- sub.l d3,d2
- add.l d2,d2
- swap d2
- move.w d2,(a1)+
-
- muls d5,d0
- muls d6,d1
- add.l d0,d1
- asl.l #2,d1
- swap d1
- moveq #0,d3
-
- move.w d1,(a1)+
- ext.l d2
- asl.l #7,d2
- add.l xwobble,d2
- move.l d2,(a1)+
- sub.l xwobble,d2
-
- add.w #64,a4
- dbra d7,.objpointrotlop
-
- rts
-
- .noworkout:
- move.l #0,(a1)+
- move.l #0,(a1)+
- add.w #64,a4
- dbra d7,.objpointrotlop
- rts
-
- LightDraw:
-
- move.w (a0)+,d0
- move.w (a0)+,d1
- move.l #Rotated,a1
- move.w 6(a1,d0.w*8),d2
- ble.s oneendbehind
- move.w 6(a1,d1.w*8),d3
- bgt.s bothendsinfront
-
- oneendbehind:
- rts
- bothendsinfront:
-
- move.l #OnScreen,a2
- move.w (a2,d0.w*2),d0
- bge.s okleftend
- moveq #0,d0
- okleftend:
- move.w (a2,d1.w*2),d1
- bgt.s somevis
- rts
- somevis:
- cmp.w #95,d0
- ble.s somevis2
- rts
- somevis2:
- cmp.w #95,d1
- ble.s okrightend
- move.w #95,d1
- okrightend:
-
- sub.w d0,d1
- blt.s wrongbloodywayround
- move.l #brightentab,a4
- move.l #objintocop,a1
- lea (a1,d0.w*2),a1
-
- move.l frompt,a3
- move.w #104*4,d6
- move.w #79,d2
- lacross:
- move.w d2,d3
- move.l a3,a2
- adda.w (a1)+,a2
- ldown:
- add.w d6,a2
- move.w (a2),d7
- move.w (a4,d7.w*2),(a2)
- dbra d3,ldown
- dbra d1,lacross
-
- wrongbloodywayround:
-
- rts
-
- FaceToPlace: dc.w 0
-
- Cheese:
- dc.w 4,15
-
- FacesList:
- dc.w 0,4*4
- dc.w 1,2*4
- dc.w 0,2*4
- dc.w 2,2*4
- dc.w 0,2*4
- dc.w 1,3*4
- dc.w 0,2*4
- dc.w 2,3*4
- dc.w 0,5*4
- dc.w 1,2*4
- dc.w 0,2*4
- dc.w 2,2*4
- dc.w 0,2*4
- dc.w 1,2*4
- dc.w 0,2*4
- dc.w 2,3*4
- dc.w 0,1*4
- dc.w 1,3*4
- dc.w 0,1*4
- dc.w 2,3*4
- dc.w 0,1*4
-
- EndOfFacesList:
-
- FacesPtr:
- dc.l FacesList
- FacesCounter:
- dc.w 0
- Expression:
- dc.w 0
-
- PlaceFace:
-
- move.w FacesCounter,d0
- subq #1,d0
- bgt.s NoNewFace
-
- move.l FacesPtr,a0
-
- move.w 2(a0),d0
- move.w (a0),Expression
- addq #4,a0
- cmp.l #EndOfFacesList,a0
- blt.s NotFirstFace
-
- move.l #FacesList,a0
-
- NotFirstFace
- move.l a0,FacesPtr
-
- NoNewFace:
-
- move.w d0,FacesCounter
-
- Move.w FaceToPlace,d0
- muls #5,d0
- add.w Expression,d0
- move.l #FacePlace+10,a0
- move.l #Faces,a1
- muls #(4*32*5),d0
- adda.w d0,a1
- move.w #4,d0
- move.w #24,d1
-
- move.w #4,d3
- bitplaneloop:
- move.w #31,d2
- PlaceFaceToPlaceInFacePlaceLoop:
- move.l (a1),(a0)
- adda.w d0,a1
- adda.w d1,a0
- dbra d2,PlaceFaceToPlaceInFacePlaceLoop
- dbra d3,bitplaneloop
-
- rts
-
- Energy:
- dc.w 191
- OldEnergy:
- dc.w 191
- Ammo: dc.w 63
- OldAmmo: dc.w 63
-
- FullEnergy:
- move.w #127,Energy
- move.w #127,OldEnergy
- move.l #health,a0
- move.l #borders,a1
- add.l #25*8*2+6,a1
- lea 2592(a1),a2
- move.w #127,d0
- PutInFull:
- move.b (a0)+,(a1)
- move.b (a0)+,8(a1)
- add.w #16,a1
- move.b (a0)+,(a2)
- move.b (a0)+,8(a2)
- add.w #16,a2
- dbra d0,PutInFull
-
- rts
-
- EnergyBar:
-
- move.w Energy,d0
- cmp.w OldEnergy,d0
- bne.s gottochange
-
- NoChange
- rts
-
- gottochange:
-
- blt LessEnergy
- cmp.w #127,Energy
- blt.s NotMax
- move.w #127,Energy
- NotMax:
-
- move.w Energy,d0
- move.w OldEnergy,d2
- sub.w d0,d2
- beq.s NoChange
- neg.w d2
-
- move.w #127,d3
- sub.w d0,d3
-
- move.l #health,a0
- lea (a0,d3.w*4),a0
- move.l #borders+25*16+6,a1
- lsl.w #4,d3
- add.w d3,a1
- lea 2592(a1),a2
-
- EnergyRise:
- move.b (a0)+,(a1)
- move.b (a0)+,8(a1)
- add.w #16,a1
- move.b (a0)+,(a2)
- move.b (a0)+,8(a2)
- add.w #16,a2
- subq #1,d2
- bgt.s EnergyRise
-
- move.w Energy,OldEnergy
-
- rts
-
- LessEnergy:
- move.w OldEnergy,d2
- sub.w d0,d2
-
- move.w #127,d3
- sub.w OldEnergy,d3
-
- move.l #borders+25*16+6,a1
- asl.w #4,d3
- add.w d3,a1
- lea 2592(a1),a2
-
- EnergyDrain:
- move.b #0,(a1)
- move.b #0,8(a1)
- move.b #0,(a2)
- move.b #0,8(a2)
- add.w #16,a1
- add.w #16,a2
- subq #1,d2
- bgt.s EnergyDrain
-
- move.w Energy,OldEnergy
-
- rts
-
- AmmoBar:
-
- move.w Ammo,d0
- cmp.w OldAmmo,d0
- bne.s .gottochange
-
- .NoChange
- rts
-
- .gottochange:
-
- blt LessAmmo
- cmp.w #63,Ammo
- blt.s .NotMax
- move.w #63,Ammo
- .NotMax:
-
- move.w Ammo,d0
- move.w OldAmmo,d2
- sub.w d0,d2
- beq.s .NoChange
- neg.w d2
-
- move.w #63,d3
- sub.w d0,d3
-
- move.l #Ammunition,a0
- lea (a0,d3.w*8),a0
- move.l #borders+5184+25*16+1,a1
- lsl.w #5,d3
- add.w d3,a1
- lea 2592(a1),a2
-
- AmmoRise:
- move.b (a0)+,(a1)
- move.b (a0)+,8(a1)
- add.w #16,a1
- move.b (a0)+,(a2)
- move.b (a0)+,8(a2)
- add.w #16,a2
- move.b (a0)+,(a1)
- move.b (a0)+,8(a1)
- add.w #16,a1
- move.b (a0)+,(a2)
- move.b (a0)+,8(a2)
- add.w #16,a2
- subq #1,d2
- bgt.s AmmoRise
-
- move.w Ammo,OldAmmo
-
- rts
-
-
- LessAmmo:
- move.w OldAmmo,d2
- sub.w d0,d2
-
- move.w #63,d3
- sub.w OldAmmo,d3
-
- move.l #borders++5184+25*16+1,a1
- asl.w #5,d3
- add.w d3,a1
- lea 2592(a1),a2
-
- AmmoDrain:
- move.b #0,(a1)
- move.b #0,8(a1)
- move.b #0,(a2)
- move.b #0,8(a2)
- add.w #16,a1
- add.w #16,a2
- move.b #0,(a1)
- move.b #0,8(a1)
- move.b #0,(a2)
- move.b #0,8(a2)
- add.w #16,a1
- add.w #16,a2
- subq #1,d2
- bgt.s AmmoDrain
-
- move.w Ammo,OldAmmo
-
- rts
-
- nulop:
- move.w #$0010,$dff000+intreq
- rte
-
- doanything: dc.w 0
-
- end:
-
- move.l drawpt,d0
- move.l olddrawpt,drawpt
- move.l d0,olddrawpt
- move.l d0,$dff084
-
- clr.b doanything
- cmp.b #'b',Prefsfile+3
- bne.s .noback
- jsr mt_end
- .noback
- tst.w Energy
- bgt.s wevewon
-
- move.l #gameover,mt_data
- st UseAllChannels
- clr.b reachedend
- jsr mt_init
- playgameover:
- move.l #$dff000,a6
- waitfortop2:
- btst.b #0,intreqrl(a6)
- beq waitfortop2
- move.w #$1,intreq(a6)
-
- jsr mt_music
-
- tst.b reachedend
- beq.s playgameover
-
- bra wevelost
-
-
- wevewon:
- move.l #welldone,mt_data
- st UseAllChannels
- clr.b reachedend
- jsr mt_init
- playwelldone:
- move.l #$dff000,a6
- waitfortop3:
- btst.b #0,intreqrl(a6)
- beq waitfortop3
- move.w #$1,intreq(a6)
-
- jsr mt_music
-
- tst.b reachedend
- beq.s playwelldone
-
- wevelost:
- jmp closeeverything
-
- endnomusic
- clr.b doanything
- cmp.b #'b',Prefsfile+3
- bne.s .noback
- jsr mt_end
- .noback
-
- jmp closeeverything
-
- do32:
- move.w #31,d7
- move.w #$180,d1
- across:
- move.w d1,(a1)+
- move.w d1,(a3)+
- move.w #0,(a1)+
- move.w #0,(a3)+
- add.w #2,d1
- dbra d7,across
- rts
-
-
-
- *************************************
- * Set left and right clip values
- *************************************
-
-
-
- NEWsetlclip:
- move.l #OnScreen,a1
- move.l #Rotated,a2
- move.l CONNECT_TABLE,a3
-
- move.w (a0),d0
- bge.s .notignoreleft
-
- ; move.l #0,(a6)
-
- bra .leftnotoktoclip
- .notignoreleft:
-
- move.w 6(a2,d0*8),d3 ; left z val
- bgt.s .leftclipinfront
- addq #2,a0
- rts
-
- tst.w 6(a2,d0*8)
- bgt.s .leftnotoktoclip
- .ignoreboth:
- ; move.l #0,(a6)
- ; move.l #96*65536,4(a6)
- move.w #0,leftclip
- move.w #96,rightclip
- addq #8,a6
- addq #2,a0
- rts
-
- .leftclipinfront:
- move.w (a1,d0*2),d1 ; left x on screen
- move.w (a0),d2
- move.w 2(a3,d2.w*4),d2
- move.w (a1,d2.w*2),d2
- cmp.w d1,d2
- bgt.s .leftnotoktoclip
-
- ; move.w d1,(a6)
- ; move.w d3,2(a6)
- cmp.w leftclip,d1
- ble.s .leftnotoktoclip
- move.w d1,leftclip
- .leftnotoktoclip:
-
- addq #2,a0
-
- rts
-
- NEWsetrclip
- move.l #OnScreen,a1
- move.l #Rotated,a2
- move.l CONNECT_TABLE,a3
- move.w (a0),d0
- bge.s .notignoreright
- ; move.w #96,4(a6)
- ; move.w #0,6(a6)
- move.w #0,d4
- bra .rightnotoktoclip
- .notignoreright:
- move.w 6(a2,d0*8),d4 ; right z val
- bgt.s .rightclipinfront
- ; move.w #96,4(a6)
- ; move.w #0,6(a6)
- bra.s .rightnotoktoclip
-
- .rightclipinfront:
- move.w (a1,d0*2),d1 ; right x on screen
- move.w (a0),d2
- move.w (a3,d2.w*4),d2
- move.w (a1,d2.w*2),d2
- cmp.w d1,d2
- blt.s .rightnotoktoclip
- ; move.w d1,4(a6)
- ; move.w d4,6(a6)
-
- cmp.w rightclip,d1
- bge.s .rightnotoktoclip
- addq #1,d1
- move.w d1,rightclip
- .rightnotoktoclip:
- addq #8,a6
- addq #2,a0
- rts
-
- FIRSTsetlrclip:
- move.l #OnScreen,a1
- move.l #Rotated,a2
-
- move.w (a0)+,d0
- bge.s .notignoreleft
- bra .leftnotoktoclip
- .notignoreleft:
-
- move.w 6(a2,d0*8),d3 ; left z val
- bgt.s .leftclipinfront
-
- move.w (a0),d0
- blt.s .ignoreboth
- tst.w 6(a2,d0*8)
- bgt.s .leftnotoktoclip
- .ignoreboth
- move.w #96,rightclip
- move.w #0,leftclip
- addq #2,a0
- rts
-
- .leftclipinfront:
- move.w (a1,d0*2),d1 ; left x on screen
- cmp.w leftclip,d1
- ble.s .leftnotoktoclip
- move.w d1,leftclip
- .leftnotoktoclip:
-
- move.w (a0)+,d0
- bge.s .notignoreright
- move.w #0,d4
- bra .rightnotoktoclip
- .notignoreright:
- move.w 6(a2,d0*8),d4 ; right z val
- ble.s .rightnotoktoclip
-
- .rightclipinfront:
- move.w (a1,d0*2),d1 ; right x on screen
- cmp.w rightclip,d1
- bge.s .rightnotoktoclip
- addq #1,d1
- move.w d1,rightclip
- .rightnotoktoclip:
-
- ; move.w leftclip,d0
- ; move.w rightclip,d1
- ; cmp.w d0,d1
- ; bge.s .noswap
- ; move.w #96,rightclip
- ; move.w #0,leftclip
- ;.noswap:
-
- rts
-
-
- leftclip2: dc.w 0
- rightclip2: dc.w 0
- ZoneBright: dc.w 0
-
- npolys: dc.w 0
-
- PLR1_fire: dc.b 0
- PLR2_fire: dc.b 0
-
- *****************************************************
-
- include "ab3:source/ObjectMove"
-
- pastdata:
- ***********************************
- * This routine animates brightnesses.
-
-
- liftpt: dc.l liftanimtab
-
- brightpt:
- dc.l brightanimtab
-
-
- liftanim:
- rts
-
- ******************************
- include "ab3:source/Anims"
- ******************************
- startpass:
- ; include "ab3:source/password_reloc.s"
- endpass:
-
- rotanimpt: dc.w 0
- xradd: dc.w 5
- yradd: dc.w 8
- xrpos: dc.w 320
- yrpos: dc.w 320
-
- rotanim:
- rts
-
- option:
- dc.l 0,0
-
- ********** WALL STUFF *******************************
-
- include "AB3:source/wallroutine3.chipmem"
-
- *****************************************************
-
- ******************************************
- * floor polygon
-
- numsidestd: dc.w 0
- bottomline: dc.w 0
-
- NewCornerBuff:
- ds.l 100
-
- itsafloordraw:
-
- * If D0 =1 then its a floor otherwise (=2) it's
- * a roof.
-
- move.w #0,above
- move.w (a0)+,d6 ; ypos of poly
-
- move.w leftclip(pc),d7
- cmp.w rightclip(pc),d7
- bge.s dontdrawreturn
-
- move.w botclip,d7
- sub.w #40,d7
- ble.s dontdrawreturn
- sub.w flooryoff,d6
- bgt.s below
- blt.s aboveplayer
- dontdrawreturn:
- move.w (a0)+,d6 ; sides-1
- add.w d6,d6
- add.w d6,a0
- add.w #4+6,a0
- rts
- aboveplayer:
- cmp.w #2,d0
- bne.s dontdrawreturn
- move.w #40,d7
- sub.w topclip,d7
- blt.s dontdrawreturn
- move.w #1,d0
- move.w d0,above
- neg.w d6
- below:
- cmp.w #1,d0
- bne.s dontdrawreturn
- move.w d6,distaddr
- muls #64,d6
- move.l d6,ypos
- divs d7,d6 ; zpos of bottom
- ; visible line
- move.w d6,minz
- move.w d7,bottomline
-
- ; Go round each point finding out
- ; if it should be visible or not.
-
- move.l a0,-(a7)
-
- move.w (a0)+,d7 ; number of sides
- move.l #Rotated,a1
- move.l #OnScreen,a2
- move.l #NewCornerBuff,a3
- moveq #0,d4
- moveq #0,d5
- moveq #0,d6
- clr.b anyclipping
-
- cornerprocessloop:
-
- move.w (a0)+,d0
- move.w 6(a1,d0.w*8),d1
- ble .canttell
-
- move.w (a2,d0.w*2),d3
- cmp.w leftclip,d3
- bgt.s .nol
- st d4
- st anyclipping
- bra.s .nos
- .nol:
- cmp.w rightclip,d3
- blt.s .nor
- st d6
- st anyclipping
- bra.s .nos
- .nor:
- st d5
- .nos:
- bra .cantell
-
- .canttell:
- st d5
- st anyclipping
-
- .cantell:
-
-
- dbra d7,cornerprocessloop
-
- move.l (a7)+,a0
- tst.b d5
- bne.s somefloortodraw
- eor.b d4,d6
- bne dontdrawreturn
-
- somefloortodraw:
-
- tst.b gourfloor
- bne goursides
-
- move.w #80,top
- move.w #-1,bottom
- move.w #0,drawit
- move.l #Rotated,a1
- move.l #OnScreen,a2
- move.w (a0)+,d7 ; no of sides
- sideloop:
- move.w minz,d6
- move.w (a0)+,d1
- move.w (a0),d3
- move.w 6(a1,d1*8),d4 ;first z
- cmp.w d6,d4
- bgt firstinfront
- move.w 6(a1,d3*8),d5 ; sec z
- cmp.w d6,d5
- ble bothbehind
- ** line must be on left and partially behind.
- sub.w d5,d4
- move.l (a1,d1*8),d0
- sub.l (a1,d3*8),d0
- asr.l #7,d0
- sub.w d5,d6
- muls d6,d0 ; new x coord
- divs d4,d0
- ext.l d0
- asl.l #7,d0
-
- add.l (a1,d3*8),d0
- move.w minz,d4
- move.w (a2,d3*2),d2
- divs d4,d0
- add.w #47,d0
- move.l ypos,d3
- divs d5,d3
- move.w bottomline,d1
- bra lineclipped
-
- firstinfront:
- move.w 6(a1,d3*8),d5 ; sec z
- cmp.w d6,d5
- bgt bothinfront
- ** line must be on right and partially behind.
- sub.w d4,d5 ; dz
- move.l (a1,d3*8),d2
- sub.l (a1,d1*8),d2 ; dx
- sub.w d4,d6
- asr.l #7,d2
- muls d6,d2 ; new x coord
- divs d5,d2
- ext.l d2
- asl.l #7,d2
- add.l (a1,d1*8),d2
- move.w minz,d5
- move.w (a2,d1*2),d0
- divs d5,d2
- add.w #47,d2
- move.l ypos,d1
- divs d4,d1
- move.w bottomline,d3
- bra lineclipped
-
- bothinfront:
-
- * Also, usefully enough, both are on-screen
- * so no bottom clipping is needed.
-
- move.w (a2,d1*2),d0 ; first x
- move.w (a2,d3*2),d2 ; second x
- move.l ypos,d1
- move.l d1,d3
- divs d4,d1 ; first y
- divs d5,d3 ; second y
- lineclipped:
- move.l #rightsidetab,a3
- cmp.w d1,d3
- beq lineflat
- st drawit
- bgt lineonright
- move.l #leftsidetab,a3
- exg d1,d3
- exg d0,d2
-
- lea (a3,d1*2),a3
-
- cmp.w top(pc),d1
- bge.s .nonewtop
- move.w d1,top
- .nonewtop:
- cmp.w bottom(pc),d3
- ble.s .nonewbot
- move.w d3,bottom
- .nonewbot:
-
- sub.w d1,d3 ; dy
- sub.w d0,d2 ; dx
-
- blt .linegoingleft
- sub.w #1,d0
-
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .noco
- ;.makeco
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makeco
- ;.noco
- ; add.w d3,d2
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
- move.w d6,d1
- addq #1,d1
-
- .pixlopright:
- move.w d0,(a3)+
- sub.w d2,d4
- bge.s .nobigstep
- add.w d1,d0
- add.w d3,d4
- dbra d5,.pixlopright
- bra lineflat
- .nobigstep
- add.w d6,d0
- dbra d5,.pixlopright
- bra lineflat
-
- .linegoingleft:
-
- sub.w #1,d0
-
- neg.w d2
-
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
-
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .nocol
- ;.makecol
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makecol
- ;.nocol
- ; add.w d3,d2
-
-
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
-
- move.w d6,d1
- addq #1,d1
-
- .pixlopleft:
- sub.w d2,d4
- bge.s .nobigstepl
- sub.w d1,d0
- add.w d3,d4
- move.w d0,(a3)+
- dbra d5,.pixlopleft
- bra lineflat
-
- .nobigstepl
- sub.w d6,d0
- move.w d0,(a3)+
- dbra d5,.pixlopleft
- bra lineflat
-
- lineonright:
-
- lea (a3,d1*2),a3
-
- cmp.w top(pc),d1
- bge.s .nonewtop
- move.w d1,top
- .nonewtop:
- cmp.w bottom(pc),d3
- ble.s .nonewbot
- move.w d3,bottom
- .nonewbot:
-
- sub.w d1,d3 ; dy
- sub.w d0,d2 ; dx
- blt .linegoingleft
- ; addq #1,d0
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .noco
- ;.makeco
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makeco
- ;.noco
- ; add.w d3,d2
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
- move.w d6,d1
- addq #1,d1
-
- .pixlopright:
- sub.w d2,d4
- bge.s .nobigstep
- add.w d1,d0
- add.w d3,d4
- move.w d0,(a3)+
- dbra d5,.pixlopright
- bra lineflat
-
- .nobigstep
- add.w d6,d0
- move.w d0,(a3)+
- dbra d5,.pixlopright
- bra lineflat
-
- .linegoingleft:
- ; addq #1,d0
- neg.w d2
-
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
-
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .nocol
- ;.makecol
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makecol
- ;.nocol
- ; add.w d3,d2
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
- move.w d6,d1
- addq #1,d1
-
- .pixlopleft:
- move.w d0,(a3)+
- sub.w d2,d4
- bge.s .nobigstepl
- sub.w d1,d0
- add.w d3,d4
- dbra d5,.pixlopleft
- bra lineflat
-
- .nobigstepl
- sub.w d6,d0
- dbra d5,.pixlopleft
-
- lineflat:
-
- bothbehind:
- dbra d7,sideloop
- bra pastsides
-
- fbr: dc.w 0
- sbr: dc.w 0
-
- goursides:
-
- move.w #80,top
- move.w #-1,bottom
- move.w #0,drawit
- move.l #Rotated,a1
- move.l #OnScreen,a2
- move.w (a0)+,d7 ; no of sides
- sideloopGOUR:
- move.w minz,d6
- move.w (a0)+,d1
- move.w (a0),d3
-
- move.l PointBrightsPtr,a4
- move.w (a4,d1.w*4),fbr
- move.w (a4,d3.w*4),sbr
-
- move.w 6(a1,d1*8),d4 ;first z
- cmp.w d6,d4
- bgt firstinfrontGOUR
- move.w 6(a1,d3*8),d5 ; sec z
- cmp.w d6,d5
- ble bothbehindGOUR
- ** line must be on left and partially behind.
- sub.w d5,d4
-
- move.w fbr,d0
- sub.w sbr,d0
- sub.w d5,d6
- muls d6,d0
- divs d4,d0
- add.w sbr,d0
- move.w d0,fbr
-
- move.l (a1,d1*8),d0
- sub.l (a1,d3*8),d0
- asr.l #7,d0
- muls d6,d0 ; new x coord
- divs d4,d0
- ext.l d0
- asl.l #7,d0
-
- add.l (a1,d3*8),d0
- move.w minz,d4
- move.w (a2,d3*2),d2
- divs d4,d0
- add.w #47,d0
- move.l ypos,d3
- divs d5,d3
-
- move.w bottomline,d1
- bra lineclippedGOUR
-
- firstinfrontGOUR:
- move.w 6(a1,d3*8),d5 ; sec z
- cmp.w d6,d5
- bgt bothinfrontGOUR
- ** line must be on right and partially behind.
- sub.w d4,d5 ; dz
-
- move.w sbr,d2
- sub.w fbr,d2
- sub.w d4,d6
- muls d6,d2
- divs d5,d2
- add.w fbr,d2
- move.w d2,sbr
-
- move.l (a1,d3*8),d2
- sub.l (a1,d1*8),d2 ; dx
- asr.l #7,d2
- muls d6,d2 ; new x coord
- divs d5,d2
- ext.l d2
- asl.l #7,d2
- add.l (a1,d1*8),d2
- move.w minz,d5
- move.w (a2,d1*2),d0
- divs d5,d2
- add.w #47,d2
- move.l ypos,d1
- divs d4,d1
- move.w bottomline,d3
- bra lineclippedGOUR
-
- bothinfrontGOUR:
-
- * Also, usefully enough, both are on-screen
- * so no bottom clipping is needed.
-
- move.w (a2,d1*2),d0 ; first x
- move.w (a2,d3*2),d2 ; second x
- move.l ypos,d1
- move.l d1,d3
- divs d4,d1 ; first y
- divs d5,d3 ; second y
- lineclippedGOUR:
- move.l #rightsidetab,a3
- cmp.w d1,d3
- bne linenotflatGOUR
-
- ; move.w fbr,d4
- ; move.w sbr,d5
- ; cmp.w d0,d2
- ; bgt.s .nsw
- ; exg d4,d5
- ;.nsw:
-
- ; move.l #leftbrighttab,a3
- ; move.w d4,(a3,d3.w)
- ; move.l #rightbrighttab,a3
- ; move.w d5,(a3,d3.w)
- bra lineflatGOUR
-
- linenotflatGOUR
- st drawit
- bgt lineonrightGOUR
- move.l #leftsidetab,a3
- exg d1,d3
- exg d0,d2
-
- lea (a3,d1*2),a3
- lea leftbrighttab-leftsidetab(a3),a4
-
- cmp.w top(pc),d1
- bge.s .nonewtop
- move.w d1,top
- .nonewtop:
- cmp.w bottom(pc),d3
- ble.s .nonewbot
- move.w d3,bottom
- .nonewbot:
-
- sub.w d1,d3 ; dy
- sub.w d0,d2 ; dx
-
- blt .linegoingleft
- sub.w #1,d0
-
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
- move.w d2,a5
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .noco
- ;.makeco
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makeco
- ;.noco
- ; add.w d3,d2
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
- move.w d6,d1
- addq #1,d1
- move.w d1,a6
-
- moveq #0,d1
- move.w sbr,d1
- move.w fbr,d2
- sub.w d1,d2
- ext.l d2
- asl.w #8,d2
- asl.w #3,d2
- divs d3,d2
- ext.l d2
- asl.l #5,d2
- swap d1
-
- .pixlopright:
- move.w d0,(a3)+
- swap d1
- move.w d1,(a4)+
- swap d1
- add.l d2,d1
-
- sub.w a5,d4
- bge.s .nobigstep
- add.w a6,d0
- add.w d3,d4
- dbra d5,.pixlopright
- bra lineflatGOUR
- .nobigstep
-
- add.w d6,d0
- dbra d5,.pixlopright
- bra lineflatGOUR
-
- .linegoingleft:
-
- sub.w #1,d0
-
- neg.w d2
-
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
-
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .nocol
- ;.makecol
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makecol
- ;.nocol
- ; add.w d3,d2
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
-
- move.w d6,d1
- addq #1,d1
- move.w d1,a6
- move.w d2,a5
-
- moveq #0,d1
- move.w sbr,d1
- move.w fbr,d2
- sub.w d1,d2
- ext.l d2
- asl.w #8,d2
- asl.w #3,d2
- divs d3,d2
- ext.l d2
- asl.l #5,d2
- swap d1
-
- .pixlopleft:
-
- swap d1
- move.w d1,(a4)+
- swap d1
- add.l d2,d1
-
- sub.w a5,d4
- bge.s .nobigstepl
- sub.w a6,d0
- add.w d3,d4
- move.w d0,(a3)+
- dbra d5,.pixlopleft
- bra lineflatGOUR
-
- .nobigstepl
- sub.w d6,d0
- move.w d0,(a3)+
- dbra d5,.pixlopleft
- bra lineflatGOUR
-
- lineonrightGOUR:
-
- lea (a3,d1*2),a3
-
- lea rightbrighttab-rightsidetab(a3),a4
-
- cmp.w top(pc),d1
- bge.s .nonewtop
- move.w d1,top
- .nonewtop:
- cmp.w bottom(pc),d3
- ble.s .nonewbot
- move.w d3,bottom
- .nonewbot:
-
- sub.w d1,d3 ; dy
- sub.w d0,d2 ; dx
- blt .linegoingleft
- ; addq #1,d0
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .noco
- ;.makeco
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makeco
- ;.noco
- ; add.w d3,d2
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
- move.w d6,d1
- addq #1,d1
-
- move.w d1,a6
- move.w d2,a5
-
- moveq #0,d1
- move.w fbr,d1
- move.w sbr,d2
- sub.w d1,d2
- ext.l d2
- asl.w #8,d2
- asl.w #3,d2
- divs d3,d2
- ext.l d2
- asl.l #5,d2
- swap d1
-
- .pixlopright:
-
- swap d1
- move.w d1,(a4)+
- swap d1
- add.l d2,d1
-
- sub.w a5,d4
- bge.s .nobigstep
- add.w a6,d0
- add.w d3,d4
- move.w d0,(a3)+
- dbra d5,.pixlopright
- bra lineflatGOUR
-
- .nobigstep
- add.w d6,d0
- move.w d0,(a3)+
- dbra d5,.pixlopright
- bra lineflatGOUR
-
- .linegoingleft:
- ; addq #1,d0
- neg.w d2
-
- ext.l d2
- divs d3,d2
- move.w d2,d6
- swap d2
-
-
- ; moveq #0,d6
- ; sub.w d3,d2
- ; blt.s .nocol
- ;.makecol
- ; addq #1,d6
- ; sub.w d3,d2
- ; bge.s .makecol
- ;.nocol
- ; add.w d3,d2
-
- move.w d3,d4
- move.w d3,d5
- subq #1,d5
- move.w d6,d1
- addq #1,d1
- move.w d1,a6
- move.w d2,a5
-
- moveq #0,d1
- move.w fbr,d1
- move.w sbr,d2
- sub.w d1,d2
- ext.l d2
- asl.w #8,d2
- asl.w #3,d2
- divs d3,d2
- ext.l d2
- asl.l #5,d2
- swap d1
-
- .pixlopleft:
-
- swap d1
- move.w d1,(a4)+
- swap d1
- add.l d2,d1
-
- move.w d0,(a3)+
- sub.w a5,d4
- bge.s .nobigstepl
- sub.w a6,d0
- add.w d3,d4
- dbra d5,.pixlopleft
- bra lineflatGOUR
-
- .nobigstepl
- sub.w d6,d0
- dbra d5,.pixlopleft
-
- lineflatGOUR:
-
- bothbehindGOUR:
- dbra d7,sideloopGOUR
-
- pastsides:
-
-
- addq #2,a0
-
- move.w #104*4,linedir
- move.l frompt,a6
- add.l #104*4*41,a6
- move.w (a0)+,scaleval
- move.w (a0)+,whichtile
- move.w (a0)+,d6
- add.w ZoneBright,d6
- move.w d6,lighttype
- move.w above(pc),d6
- beq groundfloor
- * on ceiling:
- move.w #-104*4,linedir
- suba.w #104*4,a6
- groundfloor:
-
- move.w xoff,d6
- move.w zoff,d7
- add.w xwobxoff,d7
- add.w xwobzoff,d6
- swap d6
- swap d7
- clr.w d6
- clr.w d7
- move.w scaleval(pc),d3
- beq.s .samescale
- bgt.s .scaledown
- neg.w d3
- asr.l d3,d7
- asr.l d3,d6
- bra.s .samescale
- .scaledown:
- asl.l d3,d6
- asl.l d3,d7
- .samescale
- move.l d6,sxoff
- move.l d7,szoff
- bra pastscale
-
- asr.l #3,d1
- asr.l #3,d2
- asr.l #2,d1
- asr.l #2,d2
- asr.l #1,d1
- asr.l #1,d2
- scaleprogfrom
- nop
- nop
- asl.l #1,d1
- asl.l #1,d2
- asl.l #2,d1
- asl.l #2,d2
- asl.l #3,d1
- asl.l #3,d2
-
- top: dc.w 0
- bottom: dc.w 0
- ypos: dc.l 0
- nfloors: dc.w 0
- lighttype: dc.w 0
- above: dc.w 0
- linedir: dc.w 0
- distaddr: dc.w 0
-
- minz: dc.w 0
- leftsidetab:
- ds.w 180
- rightsidetab:
- ds.w 180
- leftbrighttab:
- ds.w 180
- rightbrighttab:
- ds.w 180
-
- PointBrights:
- dc.l 0
- CurrentPointBrights:
- ds.l 1000
-
- movespd: dc.w 0
- largespd: dc.l 0
-
- pastscale:
-
- tst.b drawit(pc)
- beq dontdrawfloor
-
- move.l a0,-(a7)
-
- move.l #leftsidetab,a4
- move.w top(pc),d1
- move.w bottom(pc),d7
- tst.w above
- beq.s clipfloor
-
- move.w #40,d3
- move.w d3,d4
- sub.w topclip,d3
- sub.w botclip,d4
- cmp.w d3,d1
- bge predontdrawfloor
- cmp.w d4,d7
- blt predontdrawfloor
- cmp.w d4,d1
- bge.s .nocliptoproof
- move.w d4,d1
- .nocliptoproof
- cmp.w d3,d7
- blt doneclip
- move.w d3,d7
- bra doneclip
-
- clipfloor:
- move.w botclip,d4
- sub.w #40,d4
- cmp.w d4,d1
- bge predontdrawfloor
- move.w topclip,d3
- sub.w #40,d3
- cmp.w d3,d1
- bge.s .nocliptopfloor
- move.w d3,d1
- .nocliptopfloor
- cmp.w d3,d7
- ble predontdrawfloor
- cmp.w d4,d7
- blt.s .noclipbotfloor
- move.w d4,d7
- .noclipbotfloor:
-
- doneclip:
-
- lea (a4,d1*2),a4
- ; move.l #dists,a2
- move.w distaddr,d0
- muls #64,d0
- move.l d0,a2
- ; muls #25,d0
- ; adda.w d0,a2
- ; lea (a2,d1*2),a2
- sub.w d1,d7
- ble predontdrawfloor
- move.w d1,d0
- bne.s .notzero
- moveq #1,d0
- .notzero
- muls linedir,d1
- add.l d1,a6
- move.l #floorscalecols,a1
- move.l LineToUse,a5
-
- tst.b gourfloor
- bne dogourfloor
-
- tst.b anyclipping
- beq dofloornoclip
-
- dofloor:
- ; move.w (a2)+,d0
- move.w leftclip(pc),d3
- move.w rightclip(pc),d4
- move.w rightsidetab-leftsidetab(a4),d2
-
- addq #1,d2
- cmp.w d3,d2
- ble.s nodrawline
- cmp.w d4,d2
- ble.s noclipright
- move.w d4,d2
- noclipright:
- move.w (a4),d1
- cmp.w d4,d1
- bge.s nodrawline
- cmp.w d3,d1
- bge.s noclipleft
- move.w d3,d1
- noclipleft:
- cmp.w d1,d2
- ble.s nodrawline
-
- move.w d1,leftedge
- move.w d2,rightedge
-
- ; moveq #0,d1
- ; moveq #0,d3
- ; move.w leftbrighttab-leftsidetab(a4),d1
- ; bge.s .okbl
- ; moveq #0,d1
- ;.okbl:
-
- ; move.w rightbrighttab-leftsidetab(a4),d3
- ; bge.s .okbr
- ; moveq #0,d3
- ;.okbr:
-
- ; sub.w d1,d3
- ; asl.w #8,d1
- ; move.l d1,leftbright
- ; swap d3
- ; asr.l #5,d3
- ; divs d5,d3
- ; move.w d3,d5
- ; muls.w d6,d5
- ; asr.l #3,d5
- ; clr.b d5
- ; add.w d5,leftbright+2
-
- ; ext.l d3
- ; asl.l #5,d3
- ; swap d3
- ; asl.w #8,d3
- ; move.l d3,brightspd
-
- move.l a6,a3
- movem.l d0/d7/a2/a4/a5/a6,-(a7)
- move.l a2,d7
- divs d0,d7
- move.w d7,d0
- jsr (a5)
- movem.l (a7)+,d0/d7/a2/a4/a5/a6
- nodrawline
- adda.w linedir(pc),a6
- addq #2,a4
- addq #1,d0
- subq #1,d7
- bgt dofloor
-
- predontdrawfloor
- move.l (a7)+,a0
-
- dontdrawfloor:
-
- CACHE_FREEZE_OFF d2
- rts
-
- anyclipping: dc.w 0
-
- dofloornoclip:
- ; move.w (a2)+,d0
- move.w rightsidetab-leftsidetab(a4),d2
- addq #1,d2
- move.w (a4)+,d1
- move.w d1,leftedge
- move.w d2,rightedge
-
- ; sub.w d1,d2
-
- ; moveq #0,d1
- ; moveq #0,d3
- ; move.w leftbrighttab-leftsidetab(a4),d1
- ; bge.s .okbl
- ; moveq #0,d1
- ;.okbl:
-
- ; move.w rightbrighttab-leftsidetab(a4),d3
- ; bge.s .okbr
- ; moveq #0,d3
- ;.okbr:
-
- ; sub.w d1,d3
- ; asl.w #8,d1
- ; move.l d1,leftbright
- ; swap d3
- ; asr.l #5,d3
- ; divs d2,d3
- ; ext.l d3
- ; asl.l #5,d3
- ; swap d3
- ; asl.w #8,d3
- ; move.l d3,brightspd
-
- move.l a6,a3
- movem.l d0/d7/a2/a4/a5/a6,-(a7)
- move.l a2,d7
- divs d0,d7
- move.w d7,d0
- jsr (a5)
- movem.l (a7)+,d0/d7/a2/a4/a5/a6
- adda.w linedir(pc),a6
- addq #1,d0
- subq #1,d7
- bgt dofloornoclip
-
- bra predontdrawfloor
-
- dogourfloor:
- tst.b anyclipping
- beq dofloornoclipGOUR
-
- dofloorGOUR:
- ; move.w (a2)+,d0
- move.w leftclip(pc),d3
- move.w rightclip(pc),d4
- move.w rightsidetab-leftsidetab(a4),d2
-
- move.w d2,d5
- sub.w (a4),d5
- addq #1,d5
- moveq #0,d6
-
- addq #1,d2
- cmp.w d3,d2
- ble nodrawlineGOUR
- cmp.w d4,d2
- ble.s nocliprightGOUR
- move.w d4,d2
- nocliprightGOUR:
- move.w (a4),d1
- cmp.w d4,d1
- bge nodrawlineGOUR
- cmp.w d3,d1
- bge.s noclipleftGOUR
- move.w d3,d6
- subq #1,d6
- sub.w d1,d6
- move.w d3,d1
- noclipleftGOUR:
- cmp.w d1,d2
- ble nodrawlineGOUR
-
- move.w d1,leftedge
- move.w d2,rightedge
-
- move.l a2,d2
- divs d0,d2
- move.w d2,dst
- asr.w #7,d2
- ; addq #5,d2
- ; add.w lighttype,d2
-
- moveq #0,d1
- moveq #0,d3
- move.w leftbrighttab-leftsidetab(a4),d1
- add.w d2,d1
- bge.s .okbl
- moveq #0,d1
- .okbl:
- asr.w #1,d1
- cmp.w #14,d1
- ble.s .okdl
- move.w #14,d1
- .okdl:
-
- move.w rightbrighttab-leftsidetab(a4),d3
- add.w d2,d3
- bge.s .okbr
- moveq #0,d3
- .okbr:
- asr.w #1,d3
- cmp.w #14,d3
- ble.s .okdr
- move.w #14,d3
- .okdr:
-
- sub.w d1,d3
- asl.w #8,d1
- move.l d1,leftbright
- swap d3
- add.w #16,d3
- asr.l #5,d3
- divs d5,d3
- muls d3,d6
- add.w #256*7,d6
- asr.w #3,d6
- clr.b d6
- add.w d6,leftbright+2
-
- ext.l d3
- asl.l #5,d3
- swap d3
- asl.w #8,d3
- move.l d3,brightspd
-
- move.l a6,a3
- movem.l d0/d7/a2/a4/a5/a6,-(a7)
- move.w dst,d0
- lea floorscalecols,a1
- move.l floortile,a0
- adda.w whichtile,a0
- jsr pastfloorbright
- movem.l (a7)+,d0/d7/a2/a4/a5/a6
- nodrawlineGOUR
- adda.w linedir(pc),a6
- addq #2,a4
- addq #1,d0
- subq #1,d7
- bgt dofloorGOUR
-
- predontdrawfloorGOUR
- move.l (a7)+,a0
-
- dontdrawfloorGOUR:
-
- CACHE_FREEZE_OFF d2
- rts
-
- dofloornoclipGOUR:
- ; move.w (a2)+,d0
- move.w rightsidetab-leftsidetab(a4),d2
- addq #1,d2
- move.w (a4),d1
- move.w d1,leftedge
- move.w d2,rightedge
-
- sub.w d1,d2
-
- move.l a2,d6
- divs d0,d6
- move.w d6,d5
- asr.w #7,d5
- ; addq #5,d5
- ; add.w lighttype,d5
-
- moveq #0,d1
- moveq #0,d3
- move.w leftbrighttab-leftsidetab(a4),d1
- add.w d5,d1
- bge.s .okbl
- moveq #0,d1
- .okbl:
- asr.w #1,d1
- cmp.w #14,d1
- ble.s .okdl
- move.w #14,d1
- .okdl:
-
- move.w rightbrighttab-leftsidetab(a4),d3
- add.w d5,d3
- bge.s .okbr
- moveq #0,d3
- .okbr:
- asr.w #1,d3
- cmp.w #14,d3
- ble.s .okdr
- move.w #14,d3
- .okdr:
-
- sub.w d1,d3
- asl.w #8,d1
- move.l d1,leftbright
- swap d3
- asr.l #5,d3
- divs d2,d3
- ext.l d3
- asl.l #5,d3
- swap d3
- asl.w #8,d3
- move.l d3,brightspd
-
-
- move.l a6,a3
- movem.l d0/d7/a2/a4/a5/a6,-(a7)
- move.w d6,d0
- move.w d0,dst
- lea floorscalecols,a1
- move.l floortile,a0
- adda.w whichtile,a0
- jsr pastfloorbright
- movem.l (a7)+,d0/d7/a2/a4/a5/a6
- adda.w linedir(pc),a6
- addq #2,a4
- addq #1,d0
- subq #1,d7
- bgt dofloornoclipGOUR
-
- bra predontdrawfloorGOUR
-
-
-
- dists:
- ; incbin "floordists"
- drawit: dc.w 0
-
- LineToUse: dc.l 0
-
- ***************************
- * Right then, time for the floor
- * routine...
- * For test purposes, give it
- * a3 = point to screen
- * d0= z distance away
- * and sinval+cosval must be set up.
- ***************************
-
- leftedge: dc.w 0
- rightedge: dc.w 0
-
- rndpt: dc.l rndtab
-
- WaterFloorLine:
-
- CACHE_OFF d2
-
- move.l rndpt,a2
- move.w (a2)+,d1
- move.w (a2)+,d2
- move.w (a2)+,d3
- cmp.l #endrnd-4,a2
- blt.s okrnd
- suba.w #98,a2
- okrnd:
- move.l a2,rndpt
-
- asr.w #7,d0
- move.w d0,d1
- move.w d0,d2
- move.w d0,d3
- move.l clipd(pc,d1.w*4),d1
- move.l clipd(pc,d2.w*4),d2
- move.l clipd(pc,d3.w*4),d3
- bra pcli
-
- dc.l 0
- clipd:
- dc.l 0
- dc.l 512
- dc.l 512*2
- dc.l 512*3
- dc.l 512*4
- dc.l 512*5
- dc.l 512*6
- dc.l 512*7
- dc.l 512*8
- dc.l 512*9
- dc.l 512*10
- dc.l 512*11
- dc.l 512*12
- dc.l 512*13
- dc.l 512*14
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
- dc.l 512*15
-
- pcli:
-
- move.l #brightentab,a2
- move.l a2,a4
- move.l a4,a5
- add.l d1,a2
- add.l d2,a4
- add.l d3,a5
-
- move.l #doacrossline,a1
- move.w leftedge(pc),d1
- move.w rightedge(pc),d2
- sub.w d1,d2
- move.w time(pc,d1.w*2),d1
- move.w time(pc,d2.w*2),d2
- lea (a1,d1.w),a1
- move.w (a1,d2.w),d4
- move.w #$4e75,(a1,d2.w)
-
- moveq #0,d0
- jsr (a1)
- move.w d4,(a1,d2.w)
-
- CACHE_ON d2
-
- rts
-
- time:
- val SET 0
- REPT 100
- dc.w val
- val SET val+10
- ENDR
-
- storeit: dc.l 0
-
- doacrossline:
- ; incbin "Doacrossline"
- rts
-
- dst: dc.w 0
-
- FloorLine:
-
- move.l floortile,a0
- adda.w whichtile,a0
- move.w lighttype,d1
-
- move.w d0,dst
-
- move.w d0,d2
- *********************
- * Old version
- asr.w #8,d2
- add.w #5,d1
- *********************
- ; asr.w #3,d2
- ; sub.w #4,d2
- ; cmp.w #6,d2
- ; blt.s flbrbr
- ; move.w #6,d2
- ;flbrbr:
- *********************
- add.w d2,d1
- bge.s .fixedbright
- moveq #0,d1
- .fixedbright:
- cmp.w #28,d1
- ble.s .smallbright
- move.w #28,d1
- .smallbright:
- lea floorscalecols,a1
- add.l floorbright(pc,d1.w*4),a1
- bra pastfloorbright
-
- ConstCol: dc.w 0
-
- BumpLine:
-
- tst.b smoothbumps
- beq.s Chunky
-
- move.l #SmoothTile,a0
- lea Smoothscalecols,a1
- bra pastast
-
- Chunky:
-
- moveq #0,d2
- move.l #Bumptile,a0
- move.w whichtile,d2
- adda.w d2,a0
- ror.l #2,d2
- lsr.w #6,d2
- rol.l #2,d2
- and.w #15,d2
- move.l #ConstCols,a1
- move.w (a1,d2.w*2),ConstCol
- lea Bumpscalecols,a1
-
- pastast:
- move.w lighttype,d1
-
- move.w d0,dst
-
- move.w d0,d2
- *********************
- * Old version
- asr.w #8,d2
- add.w #5,d1
- *********************
- ; asr.w #3,d2
- ; sub.w #4,d2
- ; cmp.w #6,d2
- ; blt.s flbrbr
- ; move.w #6,d2
- ;flbrbr:
- *********************
- add.w d2,d1
- bge.s .fixedbright
- moveq #0,d1
- .fixedbright:
- cmp.w #28,d1
- ble.s .smallbright
- move.w #28,d1
- .smallbright:
- add.l floorbright(pc,d1.w*4),a1
- bra pastfloorbright
-
-
- floorbright:
- dc.l 512*0
- dc.l 512*1
- dc.l 512*1
- dc.l 512*2
- dc.l 512*2
-
- dc.l 512*3
- dc.l 512*3
- dc.l 512*4
- dc.l 512*4
- dc.l 512*5
-
- dc.l 512*5
- dc.l 512*6
- dc.l 512*6
- dc.l 512*7
- dc.l 512*7
-
- dc.l 512*8
- dc.l 512*8
- dc.l 512*9
- dc.l 512*9
- dc.l 512*10
-
- dc.l 512*10
- dc.l 512*11
- dc.l 512*11
- dc.l 512*12
- dc.l 512*12
-
- dc.l 512*13
- dc.l 512*13
- dc.l 512*14
- dc.l 512*14
-
- widthleft: dc.w 0
- scaleval: dc.w 0
- sxoff: dc.l 0
- szoff: dc.l 0
- xoff34: dc.w 0
- zoff34: dc.w 0
- scosval: dc.w 0
- ssinval: dc.w 0
-
-
- floorsetbright:
- move.l #walltiles,a0
-
- pastfloorbright
-
-
- move.w d0,d1
- muls cosval,d1 ; change in x across whole width
- move.w d0,d2
- muls sinval,d2 ; change in z across whole width
- neg.l d2
- scaleprog:
- move.w scaleval(pc),d3
- beq.s .samescale
- bgt.s .scaledown
- neg.w d3
- asr.l d3,d1
- asr.l d3,d2
- bra.s .samescale
- .scaledown:
- asl.l d3,d1
- asl.l d3,d2
- .samescale
-
- move.l d1,d3 ; z cos
- move.l d3,d6
- move.l d3,d5
- asr.l #1,d6
- add.l d6,d3
- asr.l #1,d3
-
- move.l d2,d4 ; z sin
- move.l d4,d6
- asr.l #1,d6
- add.l d4,d6
- add.l d3,d4
- neg.l d4 ; start x
-
- asr.l #1,d6 ; zsin/2
- sub.l d6,d5 ; start z
-
- add.l sxoff,d4
- add.l szoff,d5
-
- moveq #0,d6
- move.w leftedge(pc),d6
- beq.s nomultleft
-
- move.l d1,a4
- move.l d2,a5
-
- muls.l d6,d3:d1
- asr.l #6,d1
- add.l d1,d4
-
- muls.l d6,d3:d2
- asr.l #6,d2
- add.l d2,d5
- move.l a4,d1
- move.l a5,d2
-
- nomultleft:
-
- move.w d4,startsmoothx
- move.w d5,startsmoothz
-
- swap d4
- asr.l #8,d5
- ; add.w szoff,d5
- ; add.w sxoff,d4
- and.w #63,d4
- and.w #63*256,d5
- move.b d4,d5
-
- asr.l #6,d1
- asr.l #6,d2
- move.w d1,a4
- move.w d2,a5
- asr.l #8,d2
- and.w #%0011111100000000,d2
- swap d1
- add.w d1,d2
- move.w #%11111100111111,d1
- and.w d1,d5
- swap d5
- move.w startsmoothz,d5
- swap d5
- swap d2
- move.w a5,d2
- swap d2
-
- ***********************************
-
- move.w d6,a2
- move.l d2,d6
- add.w #256,d6
-
- moveq #0,d0
-
- tst.w a2
- beq startatleftedge
-
- move.w widthleft(pc),d4
-
- move.w rightedge(pc),d3
-
- cmp.w #31,a2
- bgt.s notinfirststrip
- lea (a3,a2.w*4),a3
- cmp.w #32,d3
- ble.s allinfirststrip
- move.w #32,d7
- sub.w d7,d3
- sub.w a2,d7
- bra intofirststrip
-
- allinfirststrip
- sub.w a2,d3
- move.w d3,d7
- move.w #0,d4
- bra allintofirst
-
- notinfirststrip:
- sub.w #32,a2
- sub.w #32,d3
- adda.w #33*4,a3
- cmp.w #31,a2
- bgt.s notstartinsec
- lea (a3,a2.w*4),a3
- cmp.w #32,d3
- ble.s allinsecstrip
- move.w #32,d7
- sub.w d7,d3
- sub.w a2,d7
- move.w d3,d4
- bra allintofirst
-
- allinsecstrip
- sub.w a2,d3
- move.w d3,d7
- move.w #0,d4
- bra allintofirst
- rts
-
- prot8: dc.w 0
-
- notstartinsec:
- sub.w #32,a2
- sub.w #32,d3
- adda.w #33*4,a3
- lea (a3,a2.w*4),a3
- cmp.w #32,d3
- ble.s allinthirdstrip
- move.w #32,d7
- sub.w d7,d3
- sub.w a2,d7
- move.w d3,d4
- bra allintofirst
- rts
-
- allinthirdstrip
- sub.w a2,d3
- move.w d3,d7
- move.w #0,d4
- bra allintofirst
- rts
-
- startatleftedge:
-
- move.w rightedge(pc),d3
- sub.w a2,d3
-
- move.w d3,d7
- cmp.w #32,d7
- ble.s .notoowide
- move.w #32,d7
- .notoowide:
- sub.w d7,d3
- intofirststrip:
-
- move.w d3,d4
- allintofirst:
-
- move.w startsmoothx,d3
-
- tstwat:
-
- tst.b gourfloor
- bne gouraudfloor
-
- tst.b usewater
- bne texturedwater
-
-
- ******************************
- * BumpMap the floor/ceiling! *
- tst.b usebumps
- bne.s BumpMap
- ******************************
-
- ordinary:
- moveq #0,d0
-
- dbra d7,acrossscrn
- rts
-
- usebumps: dc.w $0
- smoothbumps: dc.w $0
- gourfloor: dc.w 0
-
- include "ab3:source/bumpmap.s"
-
- CNOP 0,4
- backbefore:
- and.w d1,d5
- move.b (a0,d5.w*4),d0
- add.w a4,d3
- move.w (a1,d0.w*2),(a3)
- addq #4,a3
- addx.l d6,d5
- dbcs d7,acrossscrn
- dbcc d7,backbefore
- bra.s past1
-
- acrossscrn:
- and.w d1,d5
- move.b (a0,d5.w*4),d0
- add.w a4,d3
- move.w (a1,d0.w*2),(a3)
- addq #4,a3
- addx.l d2,d5
- dbcs d7,acrossscrn
- dbcc d7,backbefore
- past1:
- bcc.s gotoacross
-
- move.w d4,d7
- bne.s .notdoneyet
- CACHE_FREEZE_ON d2
- rts
- .notdoneyet:
-
- cmp.w #32,d7
- ble.s .notoowide
- move.w #32,d7
- .notoowide
- sub.w d7,d4
- addq #4,a3
-
- dbra d7,backbefore
- CACHE_FREEZE_ON d2
- rts
-
-
- gotoacross:
-
- move.w d4,d7
- bne.s .notdoneyet
- CACHE_FREEZE_ON d2
- rts
- .notdoneyet:
-
- cmp.w #32,d7
- ble.s .notoowide
- move.w #32,d7
- .notoowide
- sub.w d7,d4
- addq #4,a3
-
- dbra d7,acrossscrn
- CACHE_FREEZE_ON d2
- rts
-
- leftbright: dc.l 0
- brightspd: dc.l 0
-
- gouraudfloor:
- move.l leftbright,d0
- move.l brightspd,d1
- dbra d7,acrossscrngour
- rts
-
- CNOP 0,4
- backbeforegour:
- and.w #63*256+63,d5
- move.b (a0,d5.w*4),d0
- add.l d1,d0
- bcc.s .nomoreb
- add.w #256,d0
- .nomoreb:
- add.w a4,d3
- move.w (a1,d0.w*2),(a3)
- addq #4,a3
- addx.l d6,d5
- dbcs d7,acrossscrngour
- dbcc d7,backbeforegour
- bra.s past1gour
-
- acrossscrngour:
- and.w #63*256+63,d5
- move.b (a0,d5.w*4),d0
- add.l d1,d0
- bcc.s .nomoreb
- add.w #256,d0
- .nomoreb:
- add.w a4,d3
- move.w (a1,d0.w*2),(a3)
- addq #4,a3
- addx.l d2,d5
- dbcs d7,acrossscrngour
- dbcc d7,backbeforegour
- past1gour:
- bcc.s gotoacrossgour
-
- move.w d4,d7
- bne.s .notdoneyet
- move.l d0,leftbright
-
- CACHE_FREEZE_ON d2
- rts
- .notdoneyet:
-
- cmp.w #32,d7
- ble.s .notoowide
- move.w #32,d7
- .notoowide
- sub.w d7,d4
- addq #4,a3
-
- dbra d7,backbeforegour
- CACHE_FREEZE_ON d2
- rts
-
-
- gotoacrossgour:
-
- move.w d4,d7
- bne.s .notdoneyet
- CACHE_FREEZE_ON d2
- rts
- .notdoneyet:
-
- cmp.w #32,d7
- ble.s .notoowide
- move.w #32,d7
- .notoowide
- sub.w d7,d4
- addq #4,a3
-
- dbra d7,acrossscrngour
- CACHE_FREEZE_ON d2
- rts
-
-
- waterpt: dc.l waterlist
-
- waterlist:
- dc.l waterfile
- dc.l waterfile+2
- dc.l waterfile+256
- dc.l waterfile+256+2
- dc.l waterfile+512
- dc.l waterfile+512+2
- dc.l waterfile+768
- dc.l waterfile+768+2
- ; dc.l waterfile+768
- ; dc.l waterfile+512+2
- ; dc.l waterfile+512
- ; dc.l waterfile+256+2
- ; dc.l waterfile+256
- ; dc.l waterfile+2
- endwaterlist:
-
- watertouse: dc.l waterfile
-
- wtan: dc.w 0
- wateroff: dc.w 0
-
- texturedwater:
-
- add.w wateroff,d5
-
- move.l #brightentab,a1
- move.w dst,d0
- clr.b d0
- add.w d0,d0
- adda.w d0,a1
-
- move.w dst,d0
- asl.w #7,d0
- add.w wtan,d0
- and.w #8191,d0
- move.l #SineTable,a0
- move.w (a0,d0.w),d0
- ext.l d0
- move.w dst,d3
- add.w #300,d3
- divs d3,d0
- asr.w #6,d0
- add.w #2,d0
-
- move.w dst,d3
- asr.w #7,d3
- add.w d3,d0
-
- muls #104*4,d0
- move.w d0,a6
-
- move.l watertouse,a0
-
- move.w startsmoothx,d3
- dbra d7,acrossscrnw
- rts
-
- backbeforew:
- and.w d1,d5
- move.w (a0,d5.w*4),d0
- move.b 1(a3,a6.w),d0
- move.w (a1,d0.w*2),(a3)
- addq #4,a3
- add.w a4,d3
- addx.l d6,d5
- dbcs d7,acrossscrnw
- dbcc d7,backbeforew
- bcc.s past1w
- add.w #256,d5
- bra.s past1w
-
- acrossscrnw:
- and.w d1,d5
- move.w (a0,d5.w*4),d0
- move.b 1(a3,a6.w),d0
- move.w (a1,d0.w*2),(a3)
- addq #4,a3
- add.w a4,d3
- addx.l d2,d5
- dbcs d7,acrossscrnw
- dbcc d7,backbeforew
- bcc.s past1w
- add.w #256,d5
- past1w:
-
- move.w d4,d7
- bne.s .notdoneyet
- rts
- .notdoneyet:
-
- cmp.w #32,d7
- ble.s .notoowide
- move.w #32,d7
- .notoowide
- sub.w d7,d4
- addq #4,a3
-
- dbra d7,acrossscrnw
- CACHE_FREEZE_ON d2
- rts
-
- usewater: dc.w 0
- dc.w 0
- startsmoothx: dc.w 0
- dc.w 0
- startsmoothz: dc.w 0
-
- ********************************
- *
- include "AB3:source/ObjDraw3.chipram"
- *
- ********************************
-
- numframes:
- dc.w 0
-
- alframe: dc.l Objects+4096
-
- alan:
- dcb.l 8,0
- dcb.l 8,1
- dcb.l 8,2
- dcb.l 8,3
- endalan:
-
- alanptr: dc.l alan
-
- Time2: dc.l 0
- dispco:
- dc.w 0
-
- KInt_Init ;VBR Assumed $0
- move.l $68.w,OLDKINT
- Move.l #KInt_Main,$68.w Install Interrupt
- And.b #$3f,$bfe201 Set Timers
- Move.b #$7f,$bfed01
- Move.b $bfed01,d0
- Move.b #$88,$bfed01
- St.b KInt_CCode
- Move.b #$a0,$bfee01 Start Timey Thing
- Rts And return
-
- OLDKINT: dc.l 0
-
-
- KInt_Main
- Movem.l d0/d1/a0/a1/a6,-(a7) Stack everything
- Move.w #8,$dff09a Temp Disable Int.
- Move.w $dff01e,d0 Intreqr
- And.w #8,d0 Mask Out All X^ K_Int
- Beq KInt_End Not Keyboard Interrupt
- Lea $bfed01,a6
- Move.w #$8,$dff09c Clear Int.Request
- Move.b -$100(a6),d0 Move Raw Keyboard value
- Ror.b #1,d0 Roll to correct
- Not.b d0
- Move.b d0,KInt_CCode Save Corrected Keycode
- .HandShake Move.b #8,(a6)
- Move.b #7,-$900(a6)
- Move.b #0,-$800(a6)
- Move.b #0,-$100(a6)
- Move.b #$d1,$100(a6)
- Tst.b (a6)
- .wait Btst #0,(a6)
- Beq.s .wait
- Move.b #$a0,$100(a6)
- Move.b (a6),d0
- Move.b #$88,(a6)
- Lea KeyMap,a1
- Moveq.w #0,d0
- Move.b KInt_CCode(pc),d0
- Bmi.s KInt_KeyUp neg if up
-
- KInt_KeyDown
- st (a1,d0.w)
- Bra KInt_End
-
- KInt_KeyUp
- And.w #$7f,d0 Make code Positive
- clr.b (a1,d0.w)
- KInt_End Movem.l (a7)+,d0/d1/a0/a1/a6 Unstack Everything
-
- Move.w #$8008,$dff09a Re-enable Int.
- Rte
-
- KInt_CCode Ds.b 1
- KInt_Askey Ds.b 1
- KInt_OCode Ds.w 1
-
-
- OldSpace: dc.b 0
- SpaceTapped: dc.b 0
- PLR1_SPCTAP: dc.b 0
- PLR2_SPCTAP: dc.b 0
- PLR1_Ducked: dc.b 0
- PLR2_Ducked: dc.b 0
- even
-
- include "ab3:source/PLR1CONTROL.s"
- include "ab3:source/PLR2CONTROL.s"
- include "ab3:source/FALL.s"
-
- prot7: dc.w 0
-
- GOTTOSEND: dc.w 0
-
- OtherInter:
- move.w #$0010,$dff000+intreq
- movem.l d0-d7/a0-a6,-(a7)
- bra.s justshake
-
- Chan0inter:
-
- move.w #$0010,$dff000+intreq
-
- tst.b doanything
- bne.s dosomething
- rte
-
- dosomething:
-
-
- addq.w #1,FramesToDraw
- movem.l d0-d7/a0-a6,-(a7)
-
- ; jsr INITREC
- ; jsr RECEIVE
-
- ; tst.l BUFFER
- ; beq.s justshake
- ; st GOTTOSEND
- ; move.l #OtherInter,$6c
-
- justshake:
-
- cmp.b #'b',Prefsfile+3
- bne.s .noback
- jsr mt_music
- .noback:
-
- bra dontshowtime
-
- tst.b oktodisplay
- beq dontshowtime
- clr.b oktodisplay
- subq.w #1,dispco
- bgt dontshowtime
- move.w #10,dispco
-
- move.l #TimerScr+10,a0
- move.l TimeCount,d0
- bge.s timenotneg
- move.l #1111*256,d0
- timenotneg:
- asr.l #8,d0
- move.l #digits,a1
- move.w #7,d2
- digitlop
- divs #10,d0
- swap d0
- lea (a1,d0.w*8),a2
- move.b (a2)+,(a0)
- move.b (a2)+,24(a0)
- move.b (a2)+,24*2(a0)
- move.b (a2)+,24*3(a0)
- move.b (a2)+,24*4(a0)
- move.b (a2)+,24*5(a0)
- move.b (a2)+,24*6(a0)
- move.b (a2)+,24*7(a0)
- subq #1,a0
- swap d0
- ext.l d0
- dbra d2,digitlop
-
- move.l #TimerScr+10+24*10,a0
- move.l NumTimes,d0
- move.l #digits,a1
- move.w #3,d2
- digitlop2
- divs #10,d0
- swap d0
- lea (a1,d0.w*8),a2
- move.b (a2)+,(a0)
- move.b (a2)+,24(a0)
- move.b (a2)+,24*2(a0)
- move.b (a2)+,24*3(a0)
- move.b (a2)+,24*4(a0)
- move.b (a2)+,24*5(a0)
- move.b (a2)+,24*6(a0)
- move.b (a2)+,24*7(a0)
- subq #1,a0
- swap d0
- ext.l d0
- dbra d2,digitlop2
-
- move.l #TimerScr+10+24*20,a0
- moveq #0,d0
- move.w FramesToDraw,d0
- move.l #digits,a1
- move.w #2,d2
- digitlop3
- divs #10,d0
- swap d0
- lea (a1,d0.w*8),a2
- move.b (a2)+,(a0)
- move.b (a2)+,24(a0)
- move.b (a2)+,24*2(a0)
- move.b (a2)+,24*3(a0)
- move.b (a2)+,24*4(a0)
- move.b (a2)+,24*5(a0)
- move.b (a2)+,24*6(a0)
- move.b (a2)+,24*7(a0)
- subq #1,a0
- swap d0
- ext.l d0
- dbra d2,digitlop3
-
- dontshowtime:
-
-
- move.l alanptr,a0
- move.l (a0)+,alframe
- cmp.l #endalan,a0
- blt.s nostartalan
- move.l #alan,a0
- nostartalan:
- move.l a0,alanptr
-
-
- tst.b READCONTROLS
- beq.s nocontrols
-
- cmp.b #'s',mors
- beq.s control2
-
- tst.b PLR1MOUSE
- beq.s PLR1_nomouse
- bsr PLR1_mouse_control
- PLR1_nomouse:
- tst.b PLR1KEYS
- beq.s PLR1_nokeys
- bsr PLR1_keyboard_control
- PLR1_nokeys:
- ; tst.b PLR1PATH
- ; beq.s PLR1_nopath
- ; bsr PLR1_follow_path
- ;PLR1_nopath:
- tst.b PLR1JOY
- beq.s PLR1_nojoy
- bsr PLR1_JoyStick_control
- PLR1_nojoy:
- bra.s nocontrols
-
- control2:
- tst.b PLR2MOUSE
- beq.s PLR2_nomouse
- bsr PLR2_mouse_control
- PLR2_nomouse:
- tst.b PLR2KEYS
- beq.s PLR2_nokeys
- bsr PLR2_keyboard_control
- PLR2_nokeys:
- ; tst.b PLR2PATH
- ; beq.s PLR2_nopath
- ; bsr PLR1_follow_path
- ;PLR2_nopath:
- tst.b PLR2JOY
- beq.s PLR2_nojoy
- bsr PLR2_JoyStick_control
- PLR2_nojoy:
-
-
- nocontrols:
-
- move.l #$dff000,a6
-
- cmp.b #'4',Prefsfile+1
- bne.s nomuckabout
-
- move.w #$0,d0
- tst.b NoiseMade0LEFT
- beq.s noturnoff0
- move.w #1,d0
- noturnoff0:
- tst.b NoiseMade0RIGHT
- beq.s noturnoff1
- or.w #2,d0
- noturnoff1:
- tst.b NoiseMade1RIGHT
- beq.s noturnoff2
- or.w #4,d0
- noturnoff2:
- tst.b NoiseMade1LEFT
- beq.s noturnoff3
- or.w #8,d0
- noturnoff3:
- move.w d0,dmacon(a6)
-
- nomuckabout:
-
-
- ; tst.b PLR2_fire
- ; beq.s firenotpressed2
- ; fire was pressed last time.
- ; btst #7,$bfe001
- ; bne.s firenownotpressed2
- ; fire is still pressed this time.
- ; st PLR2_fire
- ; bra dointer
-
- firenownotpressed2:
- ; fire has been released.
- ; clr.b PLR2_fire
- ; bra dointer
-
- firenotpressed2
-
- ; fire was not pressed last frame...
-
- ; btst #7,$bfe001
- ; if it has still not been pressed, go back above
- ; bne.s firenownotpressed2
- ; fire was not pressed last time, and was this time, so has
- ; been clicked.
- ; st PLR2_clicked
- ; st PLR2_fire
-
- dointer
-
- cmp.b #'4',Prefsfile+1
- beq fourchannel
-
- btst #1,$dff000+intreqr
- bne.s newsampbitl
-
- movem.l (a7)+,d0-d7/a0-a6
-
- rte
-
-
- swappedem: dc.w 0
-
- newsampbitl:
-
- move.w #$820f,$dff000+dmacon
-
- move.w #$200,$dff000+intreq
-
- ; tst.b CHANNELDATA
- ; bne nochannel0
-
- move.l pos0LEFT,a0
- move.l pos2LEFT,a1
-
- move.l #tab,a2
-
- moveq #0,d0
- moveq #0,d1
- move.b vol0left,d0
- move.b vol2left,d1
- cmp.b d1,d0
- slt swappedem
- bge.s fbig0
-
- ; d1 is bigger so scale d0 and use d1
- ; as audiochannel volume.
-
- exg a0,a1
- asl.w #6,d0
- divs d1,d0
- lsl.w #8,d0
- adda.w d0,a2
- move.w d1,$dff0a8
- bra.s donechan0
-
- fbig0:
- tst.w d0
- beq.s donechan0
- asl.w #6,d1
- divs d0,d1
- lsl.w #8,d1
- adda.w d1,a2
- move.w d0,$dff0a8
-
- donechan0:
-
- move.l Aupt0,a3
- move.l a3,$dff0a0
- move.l Auback0,Aupt0
- move.l a3,Auback0
-
- move.l Auback0,a3
-
- moveq #0,d0
- moveq #0,d1
- moveq #0,d2
- moveq #0,d3
- moveq #0,d4
- moveq #0,d5
- move.w #49,d7
- loop:
- move.l (a0)+,d0
- move.b (a1)+,d1
- move.b (a1)+,d2
- move.b (a1)+,d3
- move.b (a1)+,d4
- move.b (a2,d3.w),d5
- swap d5
- move.b (a2,d1.w),d5
- asl.l #8,d5
- move.b (a2,d2.w),d5
- swap d5
- move.b (a2,d4.w),d5
- add.l d5,d0
- move.l d0,(a3)+
- dbra d7,loop
-
- tst.b swappedem
- beq.s .ok23
- exg a0,a1
- .ok23:
-
- cmp.l Samp0endLEFT,a0
- blt.s .notoffendsamp1
- move.l SampleList+6*8,a0
- move.l SampleList+6*8+4,Samp0endLEFT
- move.b #63,vol0left
- st LEFTCHANDATA+1
- move.w #0,LEFTCHANDATA+2
- .notoffendsamp1:
-
- cmp.l Samp2endLEFT,a1
- blt.s .notoffendsamp2
- move.l #empty,a1
- move.l #emptyend,Samp2endLEFT
- move.b #0,vol2left
- st LEFTCHANDATA+1+8
- move.w #0,LEFTCHANDATA+2+8
- .notoffendsamp2:
-
- move.l a0,pos0LEFT
- move.l a1,pos2LEFT
-
- nochannel0:
-
- tst.b CHANNELDATA+16
- bne nochannel1
-
-
- move.l pos0RIGHT,a0
- move.l pos2RIGHT,a1
-
- move.l Aupt1,a3
- move.l a3,$dff0b0
- move.l Auback1,Aupt1
- move.l a3,Auback1
-
- move.l #tab,a2
-
- moveq #0,d0
- moveq #0,d1
- move.b vol0right,d0
- move.b vol2right,d1
- cmp.b d1,d0
- slt swappedem
- bge.s fbig1
-
- ; d1 is bigger so scale d0 and use d1
- ; as audiochannel volume.
-
- exg a0,a1
- asl.w #6,d0
- divs d1,d0
- lsl.w #8,d0
- adda.w d0,a2
- move.w d1,$dff0b8
- bra.s donechan1
-
- fbig1:
- tst.w d0
- beq.s donechan1
- asl.w #6,d1
- divs d0,d1
- lsl.w #8,d1
- adda.w d1,a2
- move.w d0,$dff0b8
-
- donechan1:
- moveq #0,d0
- moveq #0,d1
- moveq #0,d2
- moveq #0,d3
- moveq #0,d4
- moveq #0,d5
- move.w #49,d7
- loop2:
- move.l (a0)+,d0
- move.b (a1)+,d1
- move.b (a1)+,d2
- move.b (a1)+,d3
- move.b (a1)+,d4
- move.b (a2,d3.w),d5
- swap d5
- move.b (a2,d1.w),d5
- asl.l #8,d5
- move.b (a2,d2.w),d5
- swap d5
- move.b (a2,d4.w),d5
- add.l d5,d0
- move.l d0,(a3)+
- dbra d7,loop2
-
- tst.b swappedem
- beq.s ok01
- exg a0,a1
- ok01:
-
- cmp.l Samp0endRIGHT,a0
- blt.s .notoffendsamp1
- move.l #empty,a0
- move.l #emptyend,Samp0endRIGHT
- move.b #0,vol0right
- st RIGHTCHANDATA+1
- move.w #0,RIGHTCHANDATA+2
- .notoffendsamp1:
-
- cmp.l Samp2endRIGHT,a1
- blt.s .notoffendsamp2
- move.l #empty,a1
- move.l #emptyend,Samp2endRIGHT
- move.b #0,vol2right
- st RIGHTCHANDATA+1+8
- move.w #0,RIGHTCHANDATA+2+8
- .notoffendsamp2:
-
- move.l a0,pos0RIGHT
- move.l a1,pos2RIGHT
-
- nochannel1:
-
- ******************* Other two channels
-
- move.l pos1LEFT,a0
- move.l pos3LEFT,a1
-
- move.l #tab,a2
-
- moveq #0,d0
- moveq #0,d1
- move.b vol1left,d0
- move.b vol3left,d1
- cmp.b d1,d0
- slt swappedem
- bge.s fbig2
-
- ; d1 is bigger so scale d0 and use d1
- ; as audiochannel volume.
-
- exg a0,a1
- asl.w #6,d0
- divs d1,d0
- lsl.w #8,d0
- adda.w d0,a2
- move.w d1,$dff0d8
- bra.s donechan2
-
- fbig2:
- tst.w d0
- beq.s donechan2
- asl.w #6,d1
- divs d0,d1
- lsl.w #8,d1
- adda.w d1,a2
- move.w d0,$dff0d8
-
- donechan2:
-
- move.l Aupt2,a3
- move.l a3,$dff0d0
- move.l Auback2,Aupt2
- move.l a3,Auback2
-
- moveq #0,d0
- moveq #0,d1
- moveq #0,d2
- moveq #0,d3
- moveq #0,d4
- moveq #0,d5
- move.w #49,d7
- loop3:
- move.l (a0)+,d0
- move.b (a1)+,d1
- move.b (a1)+,d2
- move.b (a1)+,d3
- move.b (a1)+,d4
- move.b (a2,d3.w),d5
- swap d5
- move.b (a2,d1.w),d5
- asl.l #8,d5
- move.b (a2,d2.w),d5
- swap d5
- move.b (a2,d4.w),d5
- add.l d5,d0
- move.l d0,(a3)+
- dbra d7,loop3
-
- tst.b swappedem
- beq.s .ok23
- exg a0,a1
- .ok23:
-
- cmp.l Samp1endLEFT,a0
- blt.s .notoffendsamp3
- move.l #empty,a0
- move.l #emptyend,Samp1endLEFT
- move.b #0,vol1left
- st LEFTCHANDATA+1+4
- move.w #0,LEFTCHANDATA+2+4
- .notoffendsamp3:
-
- cmp.l Samp3endLEFT,a1
- blt.s .notoffendsamp4
- move.l #empty,a1
- move.l #emptyend,Samp3endLEFT
- move.b #0,vol3left
- st LEFTCHANDATA+1+12
- move.w #0,LEFTCHANDATA+2+12
- .notoffendsamp4:
-
- move.l a0,pos1LEFT
- move.l a1,pos3LEFT
-
- move.l pos1RIGHT,a0
- move.l pos3RIGHT,a1
-
- move.l Aupt3,a3
- move.l a3,$dff0c0
- move.l Auback3,Aupt3
- move.l a3,Auback3
-
- move.l #tab,a2
-
- moveq #0,d0
- moveq #0,d1
- move.b vol1right,d0
- move.b vol3right,d1
- cmp.b d1,d0
- slt.s swappedem
- bge.s fbig3
-
- exg a0,a1
- asl.w #6,d0
- divs d1,d0
- lsl.w #8,d0
- adda.w d0,a2
- move.w d1,$dff0c8
- bra.s donechan3
-
- fbig3:
- tst.w d0
- beq.s donechan3
- asl.w #6,d1
- divs d0,d1
- lsl.w #8,d1
- adda.w d1,a2
- move.w d0,$dff0c8
- donechan3:
-
- moveq #0,d0
- moveq #0,d1
- moveq #0,d2
- moveq #0,d3
- moveq #0,d4
- moveq #0,d5
- move.w #49,d7
- loop4:
- move.l (a0)+,d0
- move.b (a1)+,d1
- move.b (a1)+,d2
- move.b (a1)+,d3
- move.b (a1)+,d4
- move.b (a2,d3.w),d5
- swap d5
- move.b (a2,d1.w),d5
- asl.l #8,d5
- move.b (a2,d2.w),d5
- swap d5
- move.b (a2,d4.w),d5
- add.l d5,d0
- move.l d0,(a3)+
- dbra d7,loop4
-
- tst.b swappedem
- beq.s .ok23
- exg a0,a1
- .ok23:
-
- cmp.l Samp1endRIGHT,a0
- blt.s notoffendsamp3
- move.l #empty,a0
- move.l #emptyend,Samp1endRIGHT
- move.b #0,vol1right
- st RIGHTCHANDATA+1+4
- move.w #0,RIGHTCHANDATA+2+4
- notoffendsamp3:
-
- cmp.l Samp3endRIGHT,a1
- blt.s notoffendsamp4
- move.l #empty,a1
- move.l #emptyend,Samp3endRIGHT
- move.b #0,vol3right
- st RIGHTCHANDATA+1+12
- move.w #0,RIGHTCHANDATA+2+12
- notoffendsamp4:
-
- move.l a0,pos1RIGHT
- move.l a1,pos3RIGHT
-
- movem.l (a7)+,d0-d7/a0-a6
- tst.b counting
- beq .nostartcounter
- JSR STARTCOUNT
- .nostartcounter:
-
- rte
-
- ***********************************
- * 4 channel sound routine
- ***********************************
-
- fourchannel:
-
- move.l #$dff000,a6
-
- btst #7,intreqrl(a6)
- beq.s nofinish0
- ; move.w #0,LEFTCHANDATA+2
- ; st LEFTCHANDATA+1
- move.l #null,$a0(a6)
- move.w #100,$a4(a6)
- move.w #$0080,intreq(a6)
- nofinish0:
-
- tst.b NoiseMade0pLEFT
- beq.s NoChan0sound
-
- move.l Samp0endLEFT,d0
- move.l pos0LEFT,d1
- sub.l d1,d0
- lsr.l #1,d0
- move.w d0,$a4(a6)
- move.l d1,$a0(a6)
- move.w #$8201,dmacon(a6)
- moveq #0,d0
- move.b vol0left,d0
- move.w d0,$a8(a6)
-
- NoChan0sound:
-
- *****************************************
- *****************************************
-
- btst #0,intreqr(a6)
- beq.s nofinish1
- move.l #null,$b0(a6)
- move.w #100,$b4(a6)
- move.w #$0100,intreq(a6)
- nofinish1:
-
- tst.b NoiseMade0pRIGHT
- beq.s NoChan1sound
-
- move.l Samp0endRIGHT,d0
- move.l pos0RIGHT,d1
- sub.l d1,d0
- lsr.l #1,d0
- move.w d0,$b4(a6)
- move.l d1,$b0(a6)
- move.w d0,playnull1
- move.w #$8202,dmacon(a6)
- moveq #0,d0
- move.b vol0right,d0
- move.w d0,$b8(a6)
-
- NoChan1sound:
-
- *****************************************
- *****************************************
-
- btst #1,intreqr(a6)
- beq.s nofinish2
- move.l #null,$c0(a6)
- move.w #100,$c4(a6)
- move.w #$0200,intreq(a6)
- nofinish2:
-
- tst.b NoiseMade1pRIGHT
- beq.s NoChan2sound
-
- move.l Samp1endRIGHT,d0
- move.l pos1RIGHT,d1
- sub.l d1,d0
- lsr.l #1,d0
- move.w d0,$c4(a6)
- move.w d0,playnull2
-
- move.l d1,$c0(a6)
- move.w #$8204,dmacon(a6)
- moveq #0,d0
- move.b vol1right,d0
- move.w d0,$c8(a6)
-
- NoChan2sound:
-
- *****************************************
- *****************************************
-
- btst #2,intreqr(a6)
- beq.s nofinish3
- move.l #null,$d0(a6)
- move.w #100,$d4(a6)
- move.w #$0400,intreq(a6)
- nofinish3:
-
- tst.b NoiseMade1pLEFT
- beq.s NoChan3sound
-
- move.l Samp1endLEFT,d0
- move.l pos1LEFT,d1
- sub.l d1,d0
- lsr.l #1,d0
- move.w d0,$d4(a6)
- move.w d0,playnull3
- move.l d1,$d0(a6)
- move.w #$8208,dmacon(a6)
- moveq #0,d0
- move.b vol1left,d0
- move.w d0,$d8(a6)
-
- NoChan3sound:
-
- nomorechannels:
-
- move.l NoiseMade0LEFT,NoiseMade0pLEFT
- move.l #0,NoiseMade0LEFT
- move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
- move.l #0,NoiseMade0RIGHT
-
-
- ; tst.b playnull0
- ; beq.s .nnul
- ; sub.b #1,playnull0
- ; bra.s chan0still
- ;.nnul:
- ;
- ;chan0still:
-
- tst.b NoiseMade0pLEFT
- bne.s chan0still
- tst.w playnull0
- beq.s nnul0
- sub.w #100,playnull0
- bra.s chan0still
- nnul0:
- move.w #0,LEFTCHANDATA+2
- st LEFTCHANDATA+1
- chan0still:
-
- tst.b NoiseMade0pRIGHT
- bne.s chan1still
- tst.w playnull1
- beq.s nnul1
- sub.w #100,playnull1
- bra.s chan1still
- nnul1:
- move.w #0,RIGHTCHANDATA+2
- st RIGHTCHANDATA+1
- chan1still:
-
- tst.b NoiseMade1pRIGHT
- bne.s chan2still
- tst.w playnull2
- beq.s nnul2
- sub.w #100,playnull2
- bra.s chan2still
- nnul2:
- move.w #0,RIGHTCHANDATA+2+4
- st RIGHTCHANDATA+1+4
- chan2still:
-
- tst.b NoiseMade1pLEFT
- bne.s chan3still
- tst.w playnull3
- beq.s nnul3
- sub.w #100,playnull3
- bra.s chan3still
- nnul3:
- move.w #0,LEFTCHANDATA+2+4
- st LEFTCHANDATA+1+4
-
- chan3still:
-
-
- movem.l (a7)+,d0-d7/a0-a6
- tst.b counting
- beq .nostartcounter
- JSR STARTCOUNT
- .nostartcounter:
-
- rte
-
- backbeat: dc.w 0
-
- playnull0: dc.w 0
- playnull1: dc.w 0
- playnull2: dc.w 0
- playnull3: dc.w 0
-
- Samp0endRIGHT: dc.l emptyend
- Samp1endRIGHT: dc.l emptyend
- Samp2endRIGHT: dc.l emptyend
- Samp3endRIGHT: dc.l emptyend
- Samp0endLEFT: dc.l emptyend
- Samp1endLEFT: dc.l emptyend
- Samp2endLEFT: dc.l emptyend
- Samp3endLEFT: dc.l emptyend
-
- Aupt0: dc.l null
- Auback0: dc.l null+500
- Aupt2: dc.l null3
- Auback2: dc.l null3+500
- Aupt3: dc.l null4
- Auback3: dc.l null4+500
- Aupt1: dc.l null2
- Auback1: dc.l null2+500
-
- NoiseMade0LEFT: dc.b 0
- NoiseMade1LEFT: dc.b 0
- NoiseMade2LEFT: dc.b 0
- NoiseMade3LEFT: dc.b 0
- NoiseMade0pLEFT: dc.b 0
- NoiseMade1pLEFT: dc.b 0
- NoiseMade2pLEFT: dc.b 0
- NoiseMade3pLEFT: dc.b 0
- NoiseMade0RIGHT: dc.b 0
- NoiseMade1RIGHT: dc.b 0
- NoiseMade2RIGHT: dc.b 0
- NoiseMade3RIGHT: dc.b 0
- NoiseMade0pRIGHT: dc.b 0
- NoiseMade1pRIGHT: dc.b 0
- NoiseMade2pRIGHT: dc.b 0
- NoiseMade3pRIGHT: dc.b 0
-
- empty: ds.l 100
- emptyend:
-
- **************************************
- * I want a routine to calculate all the
- * info needed for the sound player to
- * work, given say position of noise, volume
- * and sample number.
-
- Samplenum: dc.w 0
- Noisex: dc.w 0
- Noisez: dc.w 0
- Noisevol: dc.w 0
- chanpick: dc.w 0
- IDNUM: dc.w 0
- needleft: dc.b 0
- needright: dc.b 0
- STEREO: dc.b $0
- even
- prot6: dc.w 0
-
- even
-
- CHANNELDATA:
- LEFTCHANDATA:
- dc.l $00000000
- dc.l $00000000
- dc.l $FF000000
- dc.l $FF000000
- RIGHTCHANDATA:
- dc.l $00000000
- dc.l $00000000
- dc.l $FF000000
- dc.l $FF000000
-
- RIGHTPLAYEDTAB: ds.l 20
- LEFTPLAYEDTAB: ds.l 20
-
- MakeSomeNoise:
-
- ; Plan for new sound handler:
- ; It is sent a sample number,
- ; a position relative to the
- ; player, an id number and a volume.
- ; Also notifplaying.
-
- ; indirect inputs are the available
- ; channel flags and whether or not
- ; stereo sound is selected.
-
- ; the algorithm must decide
- ; whether the new sound is more
- ; important than the ones already
- ; playing. Thus an 'importance'
- ; must be calculated, probably
- ; using volume.
-
- ; The output needs to be:
-
- ; Write the pointers and volumes of
- ; the sound channels
-
-
- tst.b notifplaying
- beq.s dontworry
-
- ; find if we are already playing
-
- move.b IDNUM,d0
- move.w #7,d1
- lea CHANNELDATA,a3
- findsameasme
- tst.b (a3)
- bne.s notavail
- cmp.b 1(a3),d0
- beq SameAsMe
- notavail:
- add.w #4,a3
- dbra d1,findsameasme
- bra dontworry
- SameAsMe
- rts
-
- dontworry:
-
- ; Ok its fine for us to play a sound.
- ; So calculate left/right volume.
-
- move.w Noisex,d1
- muls d1,d1
- move.w Noisez,d2
- muls d2,d2
- move.w #64,d3
- moveq #1,d0
- add.l d1,d2
- beq pastcalc
-
- move.w #31,d0
- .findhigh
- btst d0,d2
- bne .foundhigh
- dbra d0,.findhigh
- .foundhigh
- asr.w #1,d0
- clr.l d3
- bset d0,d3
- move.l d3,d0
-
- move.w d0,d3
- muls d3,d3 ; x*x
- sub.l d2,d3 ; x*x-a
- asr.l #1,d3 ; (x*x-a)/2
- divs d0,d3 ; (x*x-a)/2x
- sub.w d3,d0 ; second approx
- bgt .stillnot0
- move.w #1,d0
- .stillnot0
-
- move.w d0,d3
- muls d3,d3
- sub.l d2,d3
- asr.l #1,d3
- divs d0,d3
- sub.w d3,d0 ; second approx
- bgt .stillnot02
- move.w #1,d0
- .stillnot02
-
- move.w #64,d3
- muls Noisevol,d3
- asr.w #1,d0
- addq #1,d0
- divs d0,d3
-
- cmp.w #64,d3
- ble.s notooloud
- move.w #64,d3
- notooloud:
-
- pastcalc:
-
- ; d3 contains volume of noise.
-
- move.w d3,d4
-
- move.w d3,d2
- muls Noisex,d2
- add.w d0,d0
- divs d0,d2
-
- bgt.s quietleft
- add.w d2,d4
- bge.s donequiet
- move.w #0,d4
- bra.s donequiet
- quietleft:
- sub.w d2,d3
- bge.s donequiet
- move.w #0,d3
- donequiet:
-
- ; d3=leftvol?
- ; d4=rightvol?
-
- clr.w needleft
-
- cmp.b d3,d4
- bgt.s RightLouder
-
- ; Left is louder; is it MUCH louder?
-
- st needleft
- move.w d3,d2
- sub.w d4,d2
- cmp.w #32,d2
- slt needright
- bra aboutsame
-
- RightLouder:
- st needright
- move.w d4,d2
- sub.w d3,d2
- cmp.w #32,d2
- slt needleft
-
- aboutsame:
-
- tst.b STEREO
- beq NOSTEREO
-
- ; Find least important sound on left
-
- move.l #0,a2
- move.l #0,d5
- move.w #10000,d2
- move.b IDNUM,d0
- lea LEFTCHANDATA,a3
- move.w #3,d1
- FindLeftChannel
- tst.b (a3)
- bne.s .notactive
- cmp.b 1(a3),d0
- beq.s FOUNDLEFT
- cmp.w 2(a3),d2
- blt.s .notactive
- move.w 2(a3),d2
- move.l a3,a2
- move.w d5,d6
-
- .notactive:
- add.w #4,a3
- add.w #1,d5
- dbra d1,FindLeftChannel
- move.l a2,a3
- bra.s gopastleft
- FOUNDLEFT:
- move.w d5,d6
- gopastleft:
- tst.l a3
- bne.s FOUNDALEFT
- rts
- FOUNDALEFT:
-
- ; d6 = channel number
- move.b d0,1(a3)
- move.w d3,2(a3)
-
- move.w Samplenum,d5
- move.l #SampleList,a3
- move.l (a3,d5.w*8),a1
- move.l 4(a3,d5.w*8),a2
-
- tst.b d6
- seq NoiseMade0LEFT
- beq.s .chan0
- cmp.b #2,d6
- slt NoiseMade1LEFT
- blt .chan1
- seq NoiseMade2LEFT
- beq .chan2
- st NoiseMade3LEFT
-
- move.b d5,LEFTPLAYEDTAB+9
- move.b d3,LEFTPLAYEDTAB+1+9
- move.b d4,LEFTPLAYEDTAB+2+9
- move.b d3,vol3left
- move.l a1,pos3LEFT
- move.l a2,Samp3endLEFT
- bra dorightchan
-
- .chan0:
- move.b d5,LEFTPLAYEDTAB
- move.b d3,LEFTPLAYEDTAB+1
- move.b d4,LEFTPLAYEDTAB+2
- move.l a1,pos0LEFT
- move.l a2,Samp0endLEFT
- move.b d3,vol0left
- bra dorightchan
-
- .chan1:
- move.b d5,LEFTPLAYEDTAB+3
- move.b d3,LEFTPLAYEDTAB+1+3
- move.b d4,LEFTPLAYEDTAB+2+3
- move.b d3,vol1left
- move.l a1,pos1LEFT
- move.l a2,Samp1endLEFT
- bra dorightchan
-
- .chan2:
- move.b d5,LEFTPLAYEDTAB+6
- move.b d3,LEFTPLAYEDTAB+1+6
- move.b d4,LEFTPLAYEDTAB+2+6
- move.l a1,pos2LEFT
- move.l a2,Samp2endLEFT
- move.b d3,vol2left
-
- dorightchan:
-
- ; Find least important sound on right
-
- move.l #0,a2
- move.l #0,d5
- move.w #10000,d2
- move.b IDNUM,d0
- lea RIGHTCHANDATA,a3
- move.w #3,d1
- FindRightChannel
- tst.b (a3)
- bne.s .notactive
- cmp.b 1(a3),d0
- beq.s FOUNDRIGHT
- cmp.w 2(a3),d2
- blt.s .notactive
- move.w 2(a3),d2
- move.l a3,a2
- move.w d5,d6
-
- .notactive:
- add.w #4,a3
- add.w #1,d5
- dbra d1,FindRightChannel
- move.l a2,a3
- bra.s gopastright
- FOUNDRIGHT:
- move.w d5,d6
- gopastright:
- tst.l a3
- bne.s FOUNDARIGHT
- rts
- FOUNDARIGHT:
-
- ; d6 = channel number
- move.b d0,1(a3)
- move.w d3,2(a3)
-
- move.w Samplenum,d5
- move.l #SampleList,a3
- move.l (a3,d5.w*8),a1
- move.l 4(a3,d5.w*8),a2
-
- tst.b d6
- seq NoiseMade0RIGHT
- beq.s .chan0
- cmp.b #2,d6
- slt NoiseMade1RIGHT
- blt .chan1
- seq NoiseMade2RIGHT
- beq .chan2
- st NoiseMade3RIGHT
-
- move.b d5,RIGHTPLAYEDTAB+9
- move.b d3,RIGHTPLAYEDTAB+1+9
- move.b d4,RIGHTPLAYEDTAB+2+9
- move.b d4,vol3right
- move.l a1,pos3RIGHT
- move.l a2,Samp3endRIGHT
- rts
-
- .chan0:
- move.b d5,RIGHTPLAYEDTAB
- move.b d3,RIGHTPLAYEDTAB+1
- move.b d4,RIGHTPLAYEDTAB+2
- move.l a1,pos0RIGHT
- move.l a2,Samp0endRIGHT
- move.b d4,vol0right
- rts
-
- .chan1:
- move.b d5,RIGHTPLAYEDTAB+3
- move.b d3,RIGHTPLAYEDTAB+1+3
- move.b d4,RIGHTPLAYEDTAB+2+3
- move.b d3,vol1right
- move.l a1,pos1RIGHT
- move.l a2,Samp1endRIGHT
- rts
-
- .chan2:
- move.b d5,RIGHTPLAYEDTAB+6
- move.b d3,RIGHTPLAYEDTAB+1+6
- move.b d4,RIGHTPLAYEDTAB+2+6
- move.l a1,pos2RIGHT
- move.l a2,Samp2endRIGHT
- move.b d3,vol2right
- rts
-
- NOSTEREO:
- move.l #0,a2
- move.l #0,d5
- move.w #10000,d2
- move.b IDNUM,d0
- lea CHANNELDATA,a3
- move.w #7,d1
- FindChannel
- tst.b (a3)
- bne.s .notactive
- cmp.b 1(a3),d0
- beq.s FOUNDCHAN
- cmp.w 2(a3),d2
- blt.s .notactive
- move.w 2(a3),d2
- move.l a3,a2
- move.w d5,d6
-
- .notactive:
- add.w #4,a3
- add.w #1,d5
- dbra d1,FindChannel
- move.l a2,a3
- bra.s gopastchan
- FOUNDCHAN:
- move.w d5,d6
- gopastchan:
- tst.l a3
- bne.s FOUNDACHAN
- tooquiet:
- rts
- FOUNDACHAN:
-
- ; d6 = channel number
-
- cmp.w d2,d3
- blt.s tooquiet
-
- move.b d0,1(a3)
- move.w d3,2(a3)
-
- move.w Samplenum,d5
- move.l #SampleList,a3
- move.l (a3,d5.w*8),a1
- move.l 4(a3,d5.w*8),a2
-
- tst.b d6
- seq NoiseMade0LEFT
- beq .chan0
- cmp.b #2,d6
- slt NoiseMade1LEFT
- blt .chan1
- seq NoiseMade2LEFT
- beq .chan2
- cmp.b #4,d6
- slt NoiseMade3LEFT
- blt .chan3
- seq NoiseMade0RIGHT
- beq .chan4
- cmp.b #6,d6
- slt NoiseMade1RIGHT
- blt .chan5
- seq NoiseMade2RIGHT
- beq .chan6
- st NoiseMade3RIGHT
-
- move.b d5,RIGHTPLAYEDTAB+9
- move.b d3,RIGHTPLAYEDTAB+1+9
- move.b d4,RIGHTPLAYEDTAB+2+9
- move.b d4,vol3right
- move.l a1,pos3RIGHT
- move.l a2,Samp3endRIGHT
- rts
-
- .chan3:
- move.b d5,LEFTPLAYEDTAB+9
- move.b d3,LEFTPLAYEDTAB+1+9
- move.b d4,LEFTPLAYEDTAB+2+9
- move.b d3,vol3left
- move.l a1,pos3LEFT
- move.l a2,Samp3endLEFT
- bra dorightchan
-
- .chan0:
- move.b d5,LEFTPLAYEDTAB
- move.b d3,LEFTPLAYEDTAB+1
- move.b d4,LEFTPLAYEDTAB+2
- move.l a1,pos0LEFT
- move.l a2,Samp0endLEFT
- move.b d3,vol0left
- rts
-
- .chan1:
- move.b d5,LEFTPLAYEDTAB+3
- move.b d3,LEFTPLAYEDTAB+1+3
- move.b d4,LEFTPLAYEDTAB+2+3
- move.b d3,vol1left
- move.l a1,pos1LEFT
- move.l a2,Samp1endLEFT
- rts
-
- .chan2:
- move.b d5,LEFTPLAYEDTAB+6
- move.b d3,LEFTPLAYEDTAB+1+6
- move.b d4,LEFTPLAYEDTAB+2+6
- move.l a1,pos2LEFT
- move.l a2,Samp2endLEFT
- move.b d3,vol2left
- rts
-
- .chan4:
- move.b d5,RIGHTPLAYEDTAB
- move.b d3,RIGHTPLAYEDTAB+1
- move.b d4,RIGHTPLAYEDTAB+2
- move.l a1,pos0RIGHT
- move.l a2,Samp0endRIGHT
- move.b d4,vol0right
- rts
-
- .chan5:
- move.b d5,RIGHTPLAYEDTAB+3
- move.b d3,RIGHTPLAYEDTAB+1+3
- move.b d4,RIGHTPLAYEDTAB+2+3
- move.b d3,vol1right
- move.l a1,pos1RIGHT
- move.l a2,Samp1endRIGHT
- rts
-
- .chan6:
- move.b d5,RIGHTPLAYEDTAB+6
- move.b d3,RIGHTPLAYEDTAB+1+6
- move.b d4,RIGHTPLAYEDTAB+2+6
- move.l a1,pos2RIGHT
- move.l a2,Samp2endRIGHT
- move.b d3,vol2right
- rts
-
- SampleList:
- dc.l Scream,EndScream
- dc.l Shoot,EndShoot
- dc.l Munch,EndMunch
- dc.l PooGun,EndPooGun
- dc.l Collect,EndCollect
- ;5
- dc.l DoorNoise,EndDoorNoise
- dc.l 0,0
- dc.l Stomp,EndStomp
- dc.l LowScream,EndLowScream
- dc.l BaddieGun,EndBaddieGun
- ;10
- dc.l SwitchNoise,EndSwitch
- dc.l Reload,EndReload
- dc.l NoAmmo,EndNoAmmo
- dc.l Splotch,EndSplotch
- dc.l SplatPop,EndSplatPop
- ;15
- dc.l Boom,EndBoom
- dc.l Hiss,EndHiss
- dc.l Howl1,EndHowl1
- dc.l Howl2,EndHowl2
- dc.l Pant,EndPant
- ;20
- dc.l Whoosh,EndWhoosh
- dc.l ROAR,EndROAR
- dc.l whoosh,Endwhoosh
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- dc.l 0,0
- ds.l 40
-
- include "ab3:source/wallchunk.s"
- include "ab3:source/loadfromdisk.s"
- include "ab3:source/screensetup.s"
- include "ab3:source/CONTROLLOOP.s"
-
- saveinters:
- dc.w 0
-
- z: dc.w 10
-
- notifplaying:
- dc.w 0
-
- audpos1: dc.w 0
- audpos1b: dc.w 0
- audpos2: dc.w 0
- audpos2b: dc.w 0
- audpos3: dc.w 0
- audpos3b: dc.w 0
- audpos4: dc.w 0
- audpos4b: dc.w 0
-
- vol0left: dc.w 0
- vol0right: dc.w 0
- vol1left: dc.w 0
- vol1right: dc.w 0
- vol2left: dc.w 0
- vol2right: dc.w 0
- vol3left: dc.w 0
- vol3right: dc.w 0
-
- pos: dc.l 0
-
- pos0LEFT: dc.l empty
- pos1LEFT: dc.l empty
- pos2LEFT: dc.l empty
- pos3LEFT: dc.l empty
- pos0RIGHT: dc.l empty
- pos1RIGHT: dc.l empty
- pos2RIGHT: dc.l empty
- pos3RIGHT: dc.l empty
-
- numtodo dc.w 0
-
- npt: dc.w 0
-
- pretab:
- val SET 0
- REPT 128
- dc.b val
- val SET val+1
- ENDR
- val SET -128
- REPT 128
- dc.b val
- val SET val+1
- ENDR
-
- tab:
- ds.b 256*65
-
-
- test: dc.l 0
- ds.l 30
-
- even
- ConstCols:
- ; incbin "ConstCols"
- even
- Smoothscalecols:
- ; incbin "smoothbumppalscaled"
- even
- SmoothTile:
- ; incbin "smoothbumptile"
- even
- Bumpscalecols:
- ; incbin "Bumppalscaled"
- even
- Bumptile:
- ; incbin "bumptile"
- even
- scalecols: ;incbin "bytepixpalscaled"
- even
- floorscalecols:
- incbin "floorpalscaled"
- ds.w 256*4
-
- even
- PaletteAddr: dc.l 0
- ChunkAddr: dc.l 0
- ;walltiles:
- ; dc.l GreenMechanicWALL
- ; dc.l BlueGreyMetalWALL
- ; dc.l TechnoDetailWALL
- ; dc.l BlueStoneWALL
- ; dc.l RedAlertWALL
- ; dc.l RockWALL
- ;
- ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
- ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
- ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
- ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
- ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
- ;RockWALL: incbin "ab3:includes/walls/rock.wad"
-
- floortile:
- dc.l 0
- ; incbin "floortile"
- even
- wallrouts:
- ; incbin "2x2WallDraw"
- CNOP 0,64
- BackPicture:
- incbin "backfile"
- EndBackPicture:
-
- drawpt: dc.l 0
- olddrawpt: dc.l 0
- frompt: dc.l 0
-
- SineTable:
- incbin "bigsine"
-
- angpos: dc.w 0
- angspd: dc.w 0
- flooryoff: dc.w 0
- xoff: dc.l 0
- yoff: dc.l 0
- yvel: dc.l 0
- zoff: dc.l 0
- tyoff: dc.l 0
- xspdval: dc.l 0
- zspdval: dc.l 0
- Zone: dc.w 0
-
- PLR1: dc.b $ff
- even
- PLR1_energy: dc.w 191
- PLR1_GunSelected: dc.w 0
- PLR1_cosval: dc.w 0
- PLR1_sinval: dc.w 0
- PLR1_angpos: dc.w 0
- PLR1_angspd: dc.w 0
- PLR1_xoff: dc.l 0
- PLR1_yoff: dc.l 0
- PLR1_yvel: dc.l 0
- PLR1_zoff: dc.l 0
- PLR1_tyoff: dc.l 0
- PLR1_xspdval: dc.l 0
- PLR1_zspdval: dc.l 0
- PLR1_Zone: dc.w 0
- PLR1_Roompt: dc.l 0
- PLR1_OldRoompt: dc.l 0
- PLR1_PointsToRotatePtr: dc.l 0
- PLR1_ListOfGraphRooms: dc.l 0
- PLR1_oldxoff: dc.l 0
- PLR1_oldzoff: dc.l 0
- PLR1_StoodInTop: dc.b 0
- even
- PLR1_height: dc.l 0
-
- ds.w 4
-
- PLR1s_cosval: dc.w 0
- PLR1s_sinval: dc.w 0
- PLR1s_angpos: dc.w 0
- PLR1s_angspd: dc.w 0
- PLR1s_xoff: dc.l 0
- PLR1s_yoff: dc.l 0
- PLR1s_yvel: dc.l 0
- PLR1s_zoff: dc.l 0
- PLR1s_tyoff: dc.l 0
- PLR1s_xspdval: dc.l 0
- PLR1s_zspdval: dc.l 0
- PLR1s_Zone: dc.w 0
- PLR1s_Roompt: dc.l 0
- PLR1s_OldRoompt: dc.l 0
- PLR1s_PointsToRotatePtr: dc.l 0
- PLR1s_ListOfGraphRooms: dc.l 0
- PLR1s_oldxoff: dc.l 0
- PLR1s_oldzoff: dc.l 0
- PLR1s_height: dc.l 0
- PLR1s_targheight: dc.l 0
-
- p1_xoff: dc.l 0
- p1_zoff: dc.l 0
- p1_yoff: dc.l 0
- p1_height: dc.l 0
- p1_angpos: dc.w 0
- p1_bobble: dc.w 0
- p1_clicked: dc.b 0
- p1_spctap: dc.b 0
- p1_ducked: dc.b 0
- p1_gunselected: dc.b 0
- p1_fire: dc.b 0
- even
- p1_holddown: dc.w 0
-
- ds.w 4
-
- PLR2: dc.b $ff
- even
- PLR2_GunSelected: dc.w 0
- PLR2_energy: dc.w 191
- PLR2_cosval: dc.w 0
- PLR2_sinval: dc.w 0
- PLR2_angpos: dc.w 0
- PLR2_angspd: dc.w 0
- PLR2_xoff: dc.l 0
- PLR2_yoff: dc.l 0
- PLR2_yvel: dc.l 0
- PLR2_zoff: dc.l 0
- PLR2_tyoff: dc.l 0
- PLR2_xspdval: dc.l 0
- PLR2_zspdval: dc.l 0
- PLR2_Zone: dc.w 0
- PLR2_Roompt: dc.l 0
- PLR2_OldRoompt: dc.l 0
- PLR2_PointsToRotatePtr: dc.l 0
- PLR2_ListOfGraphRooms: dc.l 0
- PLR2_oldxoff: dc.l 0
- PLR2_oldzoff: dc.l 0
- PLR2_StoodInTop: dc.b 0
- even
- PLR2_height: dc.l 0
-
- ds.w 4
-
- PLR2s_cosval: dc.w 0
- PLR2s_sinval: dc.w 0
- PLR2s_angpos: dc.w 0
- PLR2s_angspd: dc.w 0
- PLR2s_xoff: dc.l 0
- PLR2s_yoff: dc.l 0
- PLR2s_yvel: dc.l 0
- PLR2s_zoff: dc.l 0
- PLR2s_tyoff: dc.l 0
- PLR2s_xspdval: dc.l 0
- PLR2s_zspdval: dc.l 0
- PLR2s_Zone: dc.w 0
- PLR2s_Roompt: dc.l 0
- PLR2s_OldRoompt: dc.l 0
- PLR2s_PointsToRotatePtr: dc.l 0
- PLR2s_ListOfGraphRooms: dc.l 0
- PLR2s_oldxoff: dc.l 0
- PLR2s_oldzoff: dc.l 0
- PLR2s_height: dc.l 0
- PLR2s_targheight: dc.l 0
-
- ds.w 4
-
- p2_xoff: dc.l 0
- p2_zoff: dc.l 0
- p2_yoff: dc.l 0
- p2_height: dc.l 0
- p2_angpos: dc.w 0
- p2_bobble: dc.w 0
- p2_clicked: dc.b 0
- p2_spctap: dc.b 0
- p2_ducked: dc.b 0
- p2_gunselected: dc.b 0
- p2_fire: dc.b 0
- even
- p2_holddown: dc.w 0
-
-
- liftanimtab:
-
-
- endliftanimtab:
-
- glassball:
- ; incbin "glassball.inc"
- endglass
- glassballpt: dc.l glassball
-
- rndtab: ; incbin "randfile"
- endrnd:
-
- brightanimtab:
- dcb.w 200,20
- dc.w 5
- dc.w 10,20
- dc.w 5
- dcb.w 30,20
- dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
- dcb.w 40,0
- dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
- dcb.w 300,0
- dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
- dc.w -1
-
- Roompt: dc.l 0
- OldRoompt: dc.l 0
-
- *****************************************************************
- *
- include "AB3:source/LevelData2"
- *
- *****************************************************************
-
-
- wallpt: dc.l 0
- floorpt: dc.l 0
-
- Rotated:
- ds.l 2000
- ObjRotated:
- ds.l 2000
-
- OnScreen:
- ds.l 2000
-
- startwait: dc.w 0
- endwait: dc.w 0
-
- Faces:; incbin "faces2raw"
-
- *******************************************************************
-
- consttab:
- incbin "constantfile"
-
- *******************************************************************
-
- darkentab: incbin "darkenedcols"
- brightentab: incbin "brightenfile"
- WorkSpace:
- ds.l 8192
- waterfile: incbin "waterfile"
-
- SECTION ffff,CODE_C
-
- nullspr: dc.l 0
-
- cnop 0,8
- borders:
- incbin "leftbord"
- incbin "rightbord"
-
- health: incbin "healthstrip"
- Ammunition: incbin "ammostrip"
- healthpal: incbin "healthpal"
- PanelKeys: incbin "greenkey"
- incbin "redkey"
- incbin "yellowkey"
- incbin "bluekey"
-
- null: ds.w 500
- null2: ds.w 500
- null3: ds.w 500
- null4: ds.w 500
-
-
- Blurbfield:
-
- dc.w bpl1ptl
- bl1l: dc.w 0
- dc.w bpl1pth
- bl1h: dc.w 0
-
- dc.w diwstart,$2c81
- dc.w diwstop,$1cc1
- dc.w ddfstart,$38
- dc.w ddfstop,$b8
- dc.w bplcon0,$9201
- dc.w bplcon1,0
- dc.w $106,$c40
- blcols:
- dc.w col0,0
- dc.w col1,$fff
-
- dc.w $108,0
- dc.w $10a,0
-
- dc.w $ffff,$fffe
- dc.w $ffff,$fffe
-
- nullline:
- ds.b 80
-
- include "ab3:source/titlecop.s"
-
- bigfield:
- ; Start of our copper list.
-
- dc.w dmacon,$8020
- dc.w intreq,$8011
- dc.w $1fc,$f
- dc.w diwstart
- winstart: dc.w $2cb1
- dc.w diwstop
- winstop: dc.w $2c91
- dc.w ddfstart
- fetchstart: dc.w $48
- dc.w ddfstop
- fetchstop: dc.w $88
-
- bordercols:
- incbin "borderpal"
-
- dc.w spr0ptl
- s0l:
- dc.w 0
- dc.w spr0pth
- s0h:
- dc.w 0
- dc.w spr1ptl
- s1l:
- dc.w 0
- dc.w spr1pth
- s1h:
- dc.w 0
- dc.w spr2ptl
- s2l:
- dc.w 0
- dc.w spr2pth
- s2h:
- dc.w 0
- dc.w spr3ptl
- s3l:
- dc.w 0
- dc.w spr3pth
- s3h:
- dc.w 0
- dc.w spr4ptl
- s4l:
- dc.w 0
- dc.w spr4pth
- s4h:
- dc.w 0
- dc.w spr5ptl
- s5l:
- dc.w 0
- dc.w spr5pth
- s5h:
- dc.w 0
- dc.w spr6ptl
- s6l:
- dc.w 0
- dc.w spr6pth
- s6h:
- dc.w 0
- dc.w spr7ptl
- s7l:
- dc.w 0
- dc.w spr7pth
- s7h:
- dc.w 0
-
-
- dc.w $106,$c42
- incbin "borderpal"
-
- dc.w $106,$8c42
- dc.w col0
- hitcol: dc.w $0
- dc.w $106,$c42
- dc.w col0
- hitcol2: dc.w 0
-
- dc.w bplcon0,$7201
- dc.w bplcon1
- smoff:
- dc.w $0
-
- dc.w $108
- modulo: dc.w -24
- dc.w $10a,-24
-
- dc.w bpl1pth
- pl1h
- dc.w 0
-
- dc.w bpl1ptl
- pl1l
- dc.w 0
-
- dc.w bpl2pth
- pl2h
- dc.w 0
-
- dc.w bpl2ptl
- pl2l
- dc.w 0
-
- dc.w bpl3pth
- pl3h
- dc.w 0
-
- dc.w bpl3ptl
- pl3l
- dc.w 0
-
- dc.w bpl4pth
- pl4h
- dc.w 0
-
- dc.w bpl4ptl
- pl4l
- dc.w 0
-
- dc.w bpl5pth
- pl5h
- dc.w 0
-
- dc.w bpl5ptl
- pl5l
- dc.w 0
-
- dc.w bpl6pth
- pl6h
- dc.w 0
-
- dc.w bpl6ptl
- pl6l
- dc.w 0
-
- dc.w bpl7pth
- pl7h
- dc.w 0
-
- dc.w bpl7ptl
- pl7l
- dc.w 0
-
-
- dc.w $1001,$ff00
- dc.w intreq,$11
- yposcop:
- dc.w $2a11,$fffe
- dc.w $8a,0
-
- ; ds.l 104*12
-
- ;colbars:
- ;val SET $2a
- ; dcb.l 104*80,$1fe0000
- ; dc.w $106,$c42
- ;
- ; dc.w $80
- ;pch1:
- ; dc.w 0
- ; dc.w $82
- ;pcl1:
- ; dc.w 0
- ;
- ; dc.w $88,0
- ;
- ; dc.w $ffff,$fffe ; End copper list.
-
- ; ds.l 104*12
-
- ;colbars2:
- ;val SET $2a
- ; dcb.l 104*80,$1fe0000
- ;
- ; dc.w $106,$c42
- ;
- ; dc.w $80
- ;pch2:
- ; dc.w 0
- ; dc.w $82
- ;pcl2:
- ; dc.w 0
- ;
- ; dc.w $88,0
- ;
- ; dc.w $ffff,$fffe ; End copper list.
-
- ; ds.l 104*10
-
- NullCopper:
- dc.w $ffff,$fffe
-
- old: dc.l 0
-
- prot5: dc.w 0
- PanelCop:
-
- dc.w $80
- och:
- dc.w 0
- dc.w $82
- ocl:
- dc.w 0
-
- statskip:
- dc.w $1fe,0
- dc.w $1fe,0
-
- dc.w $10c,0
- dc.w bplcon0,$1201
- dc.w bpl1ptl
- n1l:
- dc.w 0
- dc.w bpl1pth
- n1h:
- dc.w 0
- dc.w $108,-24
- incbin "Panelpal"
-
- dc.w bpl2pth
- p2h
- dc.w 0
-
- dc.w bpl2ptl
- p2l
- dc.w 0
-
- dc.w bpl3pth
- p3h
- dc.w 0
-
- dc.w bpl3ptl
- p3l
- dc.w 0
-
- dc.w bpl4pth
- p4h
- dc.w 0
- dc.w bpl4ptl
- p4l
- dc.w 0
- dc.w bpl5pth
- p5h
- dc.w 0
- dc.w bpl5ptl
- p5l
- dc.w 0
- dc.w bpl6pth
- p6h
- dc.w 0
- dc.w bpl6ptl
- p6l
- dc.w 0
- dc.w bpl7pth
- p7h
- dc.w 0
- dc.w bpl7ptl
- p7l
- dc.w 0
- dc.w bpl8pth
- p8h
- dc.w 0
- dc.w bpl8ptl
- p8l
- dc.w 0
-
-
- dc.w ddfstart,$38
- dc.w ddfstop,$b8
- dc.w diwstart,$2c81
- dc.w diwstop,$2cc1
-
- dc.w bplcon0
- Panelcon: dc.w $0211
- dc.w bpl1pth
- p1h
- dc.w 0
-
- dc.w bpl1ptl
- p1l
- dc.w 0
-
-
- dc.w $108,40*7
- dc.w $10a,40*7
-
- dc.w $ffff,$fffe
-
- dc.w $180,$fff
-
-
- dc.w $f801,$ff00
- dc.w col1,$50
- dc.w $f901,$ff00
- dc.w col1,$90
- dc.w $fa01,$ff00
- dc.w col1,$f0
- dc.w $fb01,$ff00
- dc.w col1,$f0
- dc.w $fc01,$ff00
- dc.w col1,$90
- dc.w $fd01,$ff00
- dc.w col1,$50
-
- dc.w $fe01,$ff00
- dc.w col1,$fff
-
- dc.w $ffdf,$fffe
- dc.w $a01,$ff00
- dc.w bplcon0,$201
-
- incbin "faces2cols"
- dc.w bpl1pth
- f1h
- dc.w 0
-
- dc.w bpl1ptl
- f1l
- dc.w 0
-
- dc.w bpl2pth
- f2h
- dc.w 0
-
- dc.w bpl2ptl
- f2l
- dc.w 0
-
- dc.w bpl3pth
- f3h
- dc.w 0
-
- dc.w bpl3ptl
- f3l
- dc.w 0
-
- dc.w bpl4pth
- f4h
- dc.w 0
- dc.w bpl4ptl
- f4l
- dc.w 0
-
- dc.w bpl5pth
- f5h
- dc.w 0
- dc.w bpl5ptl
- f5l
- dc.w 0
-
- dc.w $0c01,$ff00
- dc.w bplcon0,$5201
-
- dc.w $ffff,$fffe
-
- cnop 0,64
- FacePlace:
- ; ds.l 6*32*5
-
-
-
- ********************************************
- * Stuff you don't have to worry about yet. *
- ********************************************
-
- closeeverything:
-
-
- jsr mt_end
-
- move.l #$dff000,a6
- move.l old,$dff080 ; Restore old copper list.
- move.l old,d0
- move.w d0,ocl
- swap d0
- move.w d0,och
- move.w #$8020,dmacon(a6)
- move.w #$f,dmacon(a6)
- move.l saveit,$6c.w
- move.l OLDKINT,$68.w
- move.w saveinters,d0
- or.w #$c000,d0
- move.w d0,intena(a6)
- clr.w $dff0a8
- clr.w $dff0b8
- clr.w $dff0c8
- clr.w $dff0d8
-
- ; move.w #3,d0
- ;nonewvbl
- ; btst #5,intreqrl(a6)
- ; beq.s nonewvbl
- ; move.w #$20,intreq(a6)
- ; dbra d0,nonewvbl
-
- ; move.l oldview,a1
- ; move.l a1,d0
- ; move.l gfxbase,a6
- ; jsr -$de(a6)
-
- ; cmp.b #'s',mors
- ; beq.s leaveold
- move.w #$f8e,$dff1dc
- ;leaveold:
-
- jsr RELEASEWALLMEM
- jsr RELEASESAMPMEM
- jsr RELEASELEVELMEM
- jsr RELEASEFLOORMEM
- jsr RELEASESCRNMEM
- jsr RELEASEOBJMEM
-
- move.l #0,d0
-
- rte
-
- intbase: dc.l 0
- gfxbase: dc.l 0
- oldview: dc.l 0
-
- stuff:
-
- Lea gfxname(pc),a1
- Moveq.l #0,d0
- Move.l $4.w,a6
- Jsr -$228(a6)
- Move.l d0,gfxbase
- Move.l d0,a6 Use As Base Reg
- Move.l 34(a6),oldview
- move.l 38(a6),old
- rts
-
- gfxname dc.b "graphics.library",0
- even
- INTUNAME dc.b "intuition.library",0
-
- even
-
-
- cnop 0,64
-
- Panel:
- incbin "PanelRaw"
-
- TimerScr:
- ;ds.b 40*64
-
- scrntab:
- ds.b 16
- val SET 32
- REPT 96
- dc.b val,val,val
- val SET val+1
- ENDR
- ds.b 16
-
- smallscrntab:
- val SET 32
- REPT 96
- dc.b val,val
- val SET val+1
- ENDR
-
- cnop 0,64
- scrn:
-
- dcb.l 8,$33333333
- dc.l 0
- dc.l 0
-
- dcb.l 8,$0f0f0f0f
- dc.l 0
- dc.l 0
-
- dcb.l 8,$00ff00ff
- dc.l 0
- dc.l 0
-
- dcb.l 8,$0000ffff
- dc.l 0
- dc.l 0
-
- dc.l 0,-1,0,-1,0,-1,0,-1
- dc.l 0
- dc.l 0
-
- dc.l -1,-1,0,0,-1,-1,0,0
- dc.l 0
- dc.l 0
-
- dc.l 0,0,-1,-1,-1,-1,-1,-1
- dc.l 0
- dc.l 0
-
- NumTimes: dc.l 0
- TimeCount: dc.l 0
- oldtime: dc.l 0
- counting: dc.b 0
- oktodisplay: dc.b 0
-
- INITTIMER:
- move.l #0,TimeCount
- move.l #0,NumTimes
- rts
-
- STARTCOUNT:
- move.l d0,-(a7)
- move.l $dff004,d0
- and.l #$1ffff,d0
- move.l d0,oldtime
- st counting
- move.l (a7)+,d0
- rts
-
- STOPCOUNT:
- move.l d0,-(a7)
- move.l $dff004,d0
- and.l #$1ffff,d0
-
- sub.l oldtime,d0
- cmp.l #-256,d0
- bge.s okcount
- add.l #313*256,d0
- okcount:
- add.l d0,TimeCount
- addq.l #1,NumTimes
- clr.b counting
- move.l (a7)+,d0
- rts
-
- STOPCOUNTNOADD:
- move.l d0,-(a7)
- move.l $dff004,d0
- and.l #$1ffff,d0
-
- sub.l oldtime,d0
- cmp.l #-256,d0
- bge.s okcount2
- add.l #313*256,d0
- okcount2:
- add.l d0,TimeCount
- clr.b counting
- move.l (a7)+,d0
- rts
-
- maxbot: dc.w 0
- tstneg: dc.l 0
-
- STOPTIMER:
- st oktodisplay
- rts
-
- digits: incbin "numbers.inc"
-
-
- Section Sounds,CODE_C
-
- Scream:
- ; incbin "ab3:sounds/Scream"
- ; ds.w 100
- EndScream:
- LowScream:
- ; incbin "ab3:sounds/LowScream"
- ; ds.w 100
- EndLowScream:
- BaddieGun:
- ; incbin "ab3:sounds/BaddieGun"
- EndBaddieGun:
- bass:
- ; incbin "ab3:sounds/backbass+drum"
- bassend:
- Shoot:
- ; incbin "ab3:sounds/fire!"
- EndShoot:
- Munch:
- ; incbin "ab3:sounds/munch"
- EndMunch:
- PooGun:
- ; incbin "ab3:sounds/shoot.dm"
- EndPooGun:
- Collect:
- ; incbin "ab3:sounds/collect"
- EndCollect:
- DoorNoise:
- ; incbin "ab3:sounds/newdoor"
- EndDoorNoise:
- Stomp:
- ; incbin "ab3:sounds/footstep3"
- EndStomp:
- SwitchNoise:
- ; incbin "ab3:sounds/switch"
- EndSwitch:
- Reload:
- ; incbin "ab3:sounds/switch1.SFX"
- EndReload:
- NoAmmo:
- ; incbin "ab3:sounds/noammo"
- EndNoAmmo:
- Splotch:
- ; incbin "ab3:sounds/splotch"
- EndSplotch:
- SplatPop:
- ; incbin "ab3:sounds/splatpop"
- EndSplatPop:
- Boom:
- ; incbin "ab3:sounds/boom"
- EndBoom:
- Hiss:
- ; incbin "ab3:sounds/newhiss"
- EndHiss:
- Howl1:
- ; incbin "ab3:sounds/howl1"
- EndHowl1:
- Howl2:
- ; incbin "ab3:sounds/howl2"
- EndHowl2:
- Pant:
- ; incbin "ab3:sounds/pant"
- EndPant:
- Whoosh:
- ; incbin "ab3:sounds/whoosh"
- EndWhoosh:
- ROAR:
- ; incbin "ab3:sounds/bigscream"
- EndROAR
- whoosh:
- ; incbin "ab3:sounds/flame"
- Endwhoosh:
- SECTION music,code_c
-
- UseAllChannels: dc.w 0
-
- mt_init:move.l mt_data,a0
- move.l a0,a1
- add.l #$3b8,a1
- moveq #$7f,d0
- moveq #0,d1
- mt_loop:move.l d1,d2
- subq.w #1,d0
- mt_lop2:move.b (a1)+,d1
- cmp.b d2,d1
- bgt.s mt_loop
- dbf d0,mt_lop2
- addq.b #1,d2
-
- lea mt_samplestarts(pc),a1
- asl.l #8,d2
- asl.l #2,d2
- add.l #$43c,d2
- add.l a0,d2
- move.l d2,a2
- moveq #$1e,d0
- mt_lop3:clr.l (a2)
- move.l a2,(a1)+
- moveq #0,d1
- move.w 42(a0),d1
- asl.l #1,d1
- add.l d1,a2
- add.l #$1e,a0
- dbf d0,mt_lop3
-
- or.b #$2,$bfe001
- move.b #$6,mt_speed
- clr.w $dff0a8
- clr.w $dff0b8
- clr.w $dff0c8
- clr.w $dff0d8
- clr.b mt_songpos
- clr.b mt_counter
- clr.w mt_pattpos
- rts
-
- mt_end: clr.w $dff0a8
- clr.w $dff0b8
- clr.w $dff0c8
- clr.w $dff0d8
- move.w #$f,$dff096
- rts
-
- mt_music:
- movem.l d0-d4/a0-a3/a5-a6,-(a7)
- move.l mt_data,a0
- addq.b #$1,mt_counter
- move.b mt_counter,D0
- cmp.b mt_speed,D0
- blt.s mt_nonew
- clr.b mt_counter
- bra mt_getnew
-
- mt_nonew:
- lea mt_voice1(pc),a6
- lea $dff0a0,a5
- bsr mt_checkcom
- lea mt_voice2(pc),a6
- lea $dff0b0,a5
- bsr mt_checkcom
- tst.b UseAllChannels
- beq mt_endr
- lea mt_voice3(pc),a6
- lea $dff0c0,a5
- bsr mt_checkcom
- lea mt_voice4(pc),a6
- lea $dff0d0,a5
- bsr mt_checkcom
- bra mt_endr
-
- mt_arpeggio:
- moveq #0,d0
- move.b mt_counter,d0
- divs #$3,d0
- swap d0
- cmp.w #$0,d0
- beq.s mt_arp2
- cmp.w #$2,d0
- beq.s mt_arp1
-
- moveq #0,d0
- move.b $3(a6),d0
- lsr.b #4,d0
- bra.s mt_arp3
- mt_arp1:moveq #0,d0
- move.b $3(a6),d0
- and.b #$f,d0
- bra.s mt_arp3
- mt_arp2:move.w $10(a6),d2
- bra.s mt_arp4
- mt_arp3:asl.w #1,d0
- moveq #0,d1
- move.w $10(a6),d1
- lea mt_periods(pc),a0
- moveq #$24,d7
- mt_arploop:
- move.w (a0,d0.w),d2
- cmp.w (a0),d1
- bge.s mt_arp4
- addq.l #2,a0
- dbf d7,mt_arploop
- rts
- mt_arp4:move.w d2,$6(a5)
- rts
-
- mt_getnew:
- move.l mt_data,a0
- move.l a0,a3
- move.l a0,a2
- add.l #$c,a3
- add.l #$3b8,a2
- add.l #$43c,a0
-
- moveq #0,d0
- move.l d0,d1
- move.b mt_songpos,d0
- move.b (a2,d0.w),d1
- asl.l #8,d1
- asl.l #2,d1
- add.w mt_pattpos,d1
- clr.w mt_dmacon
-
- lea $dff0a0,a5
- lea mt_voice1(pc),a6
- bsr.s mt_playvoice
- lea $dff0b0,a5
- lea mt_voice2(pc),a6
- bsr.s mt_playvoice
- tst.b UseAllChannels
- beq mt_setdma
- lea $dff0c0,a5
- lea mt_voice3(pc),a6
- bsr.s mt_playvoice
- lea $dff0d0,a5
- lea mt_voice4(pc),a6
- bsr.s mt_playvoice
- bra mt_setdma
-
- mt_playvoice:
- move.l (a0,d1.l),(a6)
- addq.l #4,d1
- moveq #0,d2
- move.b $2(a6),d2
- and.b #$f0,d2
- lsr.b #4,d2
- move.b (a6),d0
- and.b #$f0,d0
- or.b d0,d2
- tst.b d2
- beq.s mt_setregs
- moveq #0,d3
- lea mt_samplestarts(pc),a1
- move.l d2,d4
- subq.l #$1,d2
- asl.l #2,d2
- mulu #$1e,d4
- move.l (a1,d2.l),$4(a6)
- move.w (a3,d4.l),$8(a6)
- move.w $2(a3,d4.l),$12(a6)
- move.w $4(a3,d4.l),d3
- tst.w d3
- beq.s mt_noloop
- move.l $4(a6),d2
- asl.w #1,d3
- add.l d3,d2
- move.l d2,$a(a6)
- move.w $4(a3,d4.l),d0
- add.w $6(a3,d4.l),d0
- move.w d0,8(a6)
- move.w $6(a3,d4.l),$e(a6)
- move.w $12(a6),d0
- asr.w #2,d0
- move.w d0,$8(a5)
- bra.s mt_setregs
- mt_noloop:
- move.l $4(a6),d2
- add.l d3,d2
- move.l d2,$a(a6)
- move.w $6(a3,d4.l),$e(a6)
- move.w $12(a6),d0
- asr.w #2,d0
- move.w d0,$8(a5)
- mt_setregs:
- move.w (a6),d0
- and.w #$fff,d0
- beq mt_checkcom2
- move.b $2(a6),d0
- and.b #$F,d0
- cmp.b #$3,d0
- bne.s mt_setperiod
- bsr mt_setmyport
- bra mt_checkcom2
- mt_setperiod:
- move.w (a6),$10(a6)
- and.w #$fff,$10(a6)
- move.w $14(a6),d0
- move.w d0,$dff096
- clr.b $1b(a6)
-
- move.l $4(a6),(a5)
- move.w $8(a6),$4(a5)
- move.w $10(a6),d0
- and.w #$fff,d0
- move.w d0,$6(a5)
- move.w $14(a6),d0
- or.w d0,mt_dmacon
- bra mt_checkcom2
-
- mt_setdma:
- move.w #250,d0
- mt_wait:
- add.w #1,testchip
- dbra d0,mt_wait
- move.w mt_dmacon,d0
- or.w #$8000,d0
- and.w #%1111111111110011,d0
- move.w d0,$dff096
- move.w #250,d0
- mt_wait2:
- add.w #1,testchip
- dbra d0,mt_wait2
- lea $dff000,a5
- tst.b UseAllChannels
- beq.s noall
- lea mt_voice4(pc),a6
- move.l $a(a6),$d0(a5)
- move.w $e(a6),$d4(a5)
- lea mt_voice3(pc),a6
- move.l $a(a6),$c0(a5)
- move.w $e(a6),$c4(a5)
- noall:
- lea mt_voice2(pc),a6
- move.l $a(a6),$b0(a5)
- move.w $e(a6),$b4(a5)
- lea mt_voice1(pc),a6
- move.l $a(a6),$a0(a5)
- move.w $e(a6),$a4(a5)
-
- add.w #$10,mt_pattpos
- cmp.w #$400,mt_pattpos
- bne.s mt_endr
- mt_nex: clr.w mt_pattpos
- clr.b mt_break
- addq.b #1,mt_songpos
- and.b #$7f,mt_songpos
- move.b mt_songpos,d1
- ; cmp.b mt_data+$3b6,d1
- ; bne.s mt_endr
- ; move.b mt_data+$3b7,mt_songpos
- mt_endr:tst.b mt_break
- bne.s mt_nex
- movem.l (a7)+,d0-d4/a0-a3/a5-a6
- rts
-
- mt_setmyport:
- move.w (a6),d2
- and.w #$fff,d2
- move.w d2,$18(a6)
- move.w $10(a6),d0
- clr.b $16(a6)
- cmp.w d0,d2
- beq.s mt_clrport
- bge.s mt_rt
- move.b #$1,$16(a6)
- rts
- mt_clrport:
- clr.w $18(a6)
- mt_rt: rts
-
- CODESTORE: dc.l 0
-
- mt_myport:
- move.b $3(a6),d0
- beq.s mt_myslide
- move.b d0,$17(a6)
- clr.b $3(a6)
- mt_myslide:
- tst.w $18(a6)
- beq.s mt_rt
- moveq #0,d0
- move.b $17(a6),d0
- tst.b $16(a6)
- bne.s mt_mysub
- add.w d0,$10(a6)
- move.w $18(a6),d0
- cmp.w $10(a6),d0
- bgt.s mt_myok
- move.w $18(a6),$10(a6)
- clr.w $18(a6)
- mt_myok:move.w $10(a6),$6(a5)
- rts
- mt_mysub:
- sub.w d0,$10(a6)
- move.w $18(a6),d0
- cmp.w $10(a6),d0
- blt.s mt_myok
- move.w $18(a6),$10(a6)
- clr.w $18(a6)
- move.w $10(a6),$6(a5)
- rts
-
- mt_vib: move.b $3(a6),d0
- beq.s mt_vi
- move.b d0,$1a(a6)
-
- mt_vi: move.b $1b(a6),d0
- lea mt_sin(pc),a4
- lsr.w #$2,d0
- and.w #$1f,d0
- moveq #0,d2
- move.b (a4,d0.w),d2
- move.b $1a(a6),d0
- and.w #$f,d0
- mulu d0,d2
- lsr.w #$6,d2
- move.w $10(a6),d0
- tst.b $1b(a6)
- bmi.s mt_vibmin
- add.w d2,d0
- bra.s mt_vib2
- mt_vibmin:
- sub.w d2,d0
- mt_vib2:move.w d0,$6(a5)
- move.b $1a(a6),d0
- lsr.w #$2,d0
- and.w #$3c,d0
- add.b d0,$1b(a6)
- rts
-
- mt_nop: move.w $10(a6),$6(a5)
- rts
-
-
- mt_checkcom:
- move.w $2(a6),d0
- and.w #$fff,d0
- beq.s mt_nop
- move.b $2(a6),d0
- and.b #$f,d0
- tst.b d0
- beq mt_arpeggio
- cmp.b #$1,d0
- beq.s mt_portup
- cmp.b #$2,d0
- beq mt_portdown
- cmp.b #$3,d0
- beq mt_myport
- cmp.b #$4,d0
- beq mt_vib
- move.w $10(a6),$6(a5)
- cmp.b #$a,d0
- beq.s mt_volslide
- rts
-
- mt_volslide:
- moveq #0,d0
- move.b $3(a6),d0
- lsr.b #4,d0
- tst.b d0
- beq.s mt_voldown
- add.w d0,$12(a6)
- cmp.w #$40,$12(a6)
- bmi.s mt_vol2
- move.w #$40,$12(a6)
- mt_vol2:move.w $12(a6),d0
- asr.w #2,d0
- move.w d0,$8(a5)
- rts
-
- mt_voldown:
- moveq #0,d0
- move.b $3(a6),d0
- and.b #$f,d0
- sub.w d0,$12(a6)
- bpl.s mt_vol3
- clr.w $12(a6)
- mt_vol3:move.w $12(a6),d0
- asr.w #2,d0
- move.w d0,$8(a5)
- rts
-
- mt_portup:
- moveq #0,d0
- move.b $3(a6),d0
- sub.w d0,$10(a6)
- move.w $10(a6),d0
- and.w #$fff,d0
- cmp.w #$71,d0
- bpl.s mt_por2
- and.w #$f000,$10(a6)
- or.w #$71,$10(a6)
- mt_por2:move.w $10(a6),d0
- and.w #$fff,d0
- move.w d0,$6(a5)
- rts
-
- mt_portdown:
- clr.w d0
- move.b $3(a6),d0
- add.w d0,$10(a6)
- move.w $10(a6),d0
- and.w #$fff,d0
- cmp.w #$358,d0
- bmi.s mt_por3
- and.w #$f000,$10(a6)
- or.w #$358,$10(a6)
- mt_por3:move.w $10(a6),d0
- and.w #$fff,d0
- move.w d0,$6(a5)
- rts
-
- mt_checkcom2:
- move.b $2(a6),d0
- and.b #$f,d0
- cmp.b #$e,d0
- beq.s mt_setfilt
- cmp.b #$d,d0
- beq.s mt_pattbreak
- cmp.b #$b,d0
- beq.s mt_posjmp
- cmp.b #$c,d0
- beq.s mt_setvol
- cmp.b #$f,d0
- beq.s mt_setspeed
- rts
-
- mt_setfilt:
- move.b $3(a6),d0
- and.b #$1,d0
- asl.b #$1,d0
- and.b #$fd,$bfe001
- or.b d0,$bfe001
- rts
- mt_pattbreak:
- not.b mt_break
- rts
- mt_posjmp:
- st reachedend
- move.b $3(a6),d0
- subq.b #$1,d0
- move.b d0,mt_songpos
- not.b mt_break
- rts
- mt_setvol:
- cmp.b #$40,$3(a6)
- ble.s mt_vol4
- move.b #$40,$3(a6)
- mt_vol4:move.b $3(a6),d0
- asr.w #2,d0
- move.w d0,$8(a5)
- rts
- mt_setspeed:
- cmp.b #$1f,$3(a6)
- ble.s mt_sets
- move.b #$1f,$3(a6)
- mt_sets:move.b $3(a6),d0
- beq.s mt_rts2
- move.b d0,mt_speed
- clr.b mt_counter
- mt_rts2:rts
-
- mt_sin:
- DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
- DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
-
- mt_periods:
- DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
- DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
- DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
- DC.w $007f,$0078,$0071,$0000,$0000
-
- reachedend: dc.b 0
- mt_speed: DC.b 6
- mt_songpos: DC.b 0
- mt_pattpos: DC.w 0
- mt_counter: DC.b 0
-
- mt_break: DC.b 0
- mt_dmacon: DC.w 0
- mt_samplestarts:DS.L $1f
- mt_voice1: DS.w 10
- DC.w 1
- DS.w 3
- mt_voice2: DS.w 10
- DC.w 2
- DS.w 3
- mt_voice3: DS.w 10
- DC.w 4
- DS.w 3
- mt_voice4: DS.w 10
- DC.w 8
- DS.w 3
-
- testchip: dc.w 0
-
- ;/* End of File */
- mt_data: dc.l 0
- tstchip: dc.l 0
- include "SERIAL_NIGHTMARE"
-
-
- ingame:
- ; incbin "ab3:includes/ingame"
- gameover: incbin "ab3:includes/gameover"
- welldone: incbin "ab3:includes/welldone"
-